借助 MongoDB 的数据基础和高级搜索功能,在产品发现品牌和战略之间实现个性化、实时的一致性。
行业: 零售
产品和工具: MongoDB Atlas,MongoDB Atlas Search,MongoDB Atlas Vector Search,MongoDB Node.js 驱动程序,MongoDB Python 驱动程序,MongoDB Voyage AI
解决方案概述
在一个充满产品、促销和不断变化的世界中,您面临着一个核心挑战:如何将每个客户数的独特需求与不断变化的目录联系起来,其中的品牌服务于不同的目的和活动目标?
要解决这个问题,就必须超越静态促销,采用品牌放大,这是一种在正确的时间和背景下与正确的品牌一起提高可见性、互动和情感联系的战略方法。
在此解决方案中,您学习如何使用数据和技术来实现品牌放大策略,使客户数与您的零售目标保持一致。
由MongoDB和高级搜索提供支持的Leafy Associate应用,存储可以立即响应任何客户数请求,无论是特定请求、基于偏好的建议还是一般性建议。
每次搜索都成为一次个性化查询。结果与购物者保持相关,并与经理实时更新的特定存储的品牌优先级保持一致。
图 1。实时品牌放大和用户查询会输入MongoDB聚合管道,通过 MongoDB 的高级搜索功能生成智能推荐,从而推动有目的的购买并强化一致的品牌体验。
所有这些都在MongoDB上运行,提供一致、安全和高性能的结果。
让我们来探索一下它是如何工作的。
数据模型方法
架构设计过程
为了防止随着应用的增长而出现模式和性能问题,请从可靠的数据建模开始。
在此解决方案中,您将围绕四个核心集合构建一个统一数据层:
products:产品目录(名称、说明、类别、标识符)。inventory:库存水平、补货数据、预测指标。stores:存储元数据(名称、位置、操作详细信息)。brandAmplification:每家存储的品牌/品类提升规则。
按照此进程可靠地实现品牌放大和扩展。
确定应用程序工作负载
使用热门查询来选择有效的索引并减少数据库调用。
假设电商和存储使用相同的运营数据。
将客户数意图与品牌战略实时联系起来,并保持跨渠道库存一致。
使用下表估算 Leafy Associate 工作负载,并将此估算值作为读/写入优先级的基线:
操作查询类型目标集合频率优先级注意店内产品发现。查找与客户数要求相匹配的产品(文本/意图/混合搜索),显示该存储当前是否有股票。(50 存储)
读取
Products,inventory约 500K/天
关键
主要员工流程。在每个产品中嵌入每个存储的库存摘要标志,以避免 $lookup
电子商务搜索。按规范、意图或混合搜索(6K 产品)
读取
Products~1百万/天
关键
推动在线发现,并且必须保持延迟。考虑专用或读取隔离的搜索节点
应用品牌提升提升排名
读取
brandAmplification约 300k/天
高
排名时应用存储级品牌提升;无需产品更新
更新实时库存和预测指标(摄取)
写入
inventory约 700k/天
关键
库存记录系统(存储和仓库)的单一视图。小而频繁的写入
查找最近有股票的替代存储
读取
inventory,stores约 100k/天
低
按距离划分的地理空间排名
配置品牌放大(更新提升策略)
写入
brandAmplification>500/天
低
通过可选的品类范围提升每个存储品牌;运行时可调整,无需产品重写。
映射模式关系
您确定的工作负载会影响您设计模式的方式。
在品牌放大中,您的关系模型决定了 Leafy Associate 和电商应用中的读取延迟,并影响库存系统中的写入操作费用。
优化查询
为了改进店内产品发现功能,请使用 嵌入模式 将
inventorySummary[]嵌入到产品中。这种方法可在单个读取操作中返回产品详细信息和可用性,并避免昂贵的 $lookup 操作。该代码片段显示了products集合中的示例文档。{ "_id": "685bfe2b3d832cf7e1614577", "productName": "Onion", "brand": "Fresho", "price": { "amount": 31.02, "currency": "USD" }, "category": "Fruits & Vegetables", "subCategory": "Potato, Onion & Tomato", "aboutTheProduct": "Onion is a versatile vegetable used in salads and curries.", "embeddingText": "Onion | Fresho | 5 kg | Fruits & Vegetables | ...", "multimodalEmbeddingVector": [0.03, 0.12, 0.07, "..."], "inventorySummary": [ { "storeId": "store-019", "sectionId": "S01", "aisleId": "I11", "shelfId": "SH111", "inStock": true, "nearToReplenishmentInShelf": false }, { "storeId": "store-027", "sectionId": "S02", "aisleId": "I21", "shelfId": "SH213", "inStock": true, "nearToReplenishmentInShelf": true } ] } 对于优化的运营库存单一视图查询,请将详细的库存数据保存在单独的集合中并引用产品。为每个产品存储一个文档,以维护跨渠道和存储的单一视图,并在一个位置更新股票。以下代码片段显示了
inventory集合中的示例文档。{ "_id": "6863fc8057105b3a8ccb57cd", "productId": "685bfe2b3d832cf7e1614577", "storeInventory": [ { "storeId": "store-015", "storeName": "Trikasemmart - Chiang Mai", "coordinates": [98.985583, 18.7929], "shelfQuantity": 22, "backroomQuantity": 0, "inStock": true, "predictedStockDepletion": "2025-10-23", "nextRestock": "2025-10-19" }, { "storeId": "store-006", "storeName": "Vinyuvanichkul - Nakhon Ratchasima", "coordinates": [102.104829, 14.964336], "shelfQuantity": 27, "backroomQuantity": 49, "inStock": true, "nextRestock": "2025-10-21" } ], "updatedAt": "2025-10-17T00:00:01Z" } 要查找附近有股票的存储,请将存储坐标保存在GeoJSON point中以运行地理空间查询。以下代码片段显示了
stores集合中的示例文档。{ "_id": "684aa28064ff7c785a568aca", "storeId": "store-001", "storeName": "Chaihirankarn, Bunlupong and Chomsri - Surat Thani", "location": { "type": "Point", "coordinates": [ 99.317989, 9.133786 ], "address": "3597 Methavorakul Tunnel Suite 886", "city": "Surat Thani" }, … } 数据一致性
使用Atlas Triggers从
inventory同步所需字段并保持products.inventorySummary[]一致。优化每次搜索中的品牌排名规则
在排名时应用品牌提升,并在
brandAmplification中存储规则。在不重写产品数据的情况下推广战略品牌。{ "_id": "68e43c6865c4a374ea78b4b0", "storeId": "store-015", "brandName": "Teamonk", "categories": ["Beverages", "Gourmet & World Food"], "boostLevel": 1, "effectiveFrom": "2025-10-01", "effectiveTo": "2025-10-31" } 索引
参考架构
通过四个核心组件构建品牌效应:
Leafy Associate 主应用程序: 使用 Next.js 构建的主应用程序,处理用户界面和用户交互。它通过官方驱动程序连接到MongoDB,并调用高级搜索微服务。
高级搜索微服务:用于处理搜索的专用Python后端。它使用MongoDB 聚合管道进行文本、向量和混合搜索,并使用Voyage AI进行嵌入。
Voyage AI嵌入服务:一种外部API,可为语义搜索查询实时生成向量嵌入。
MongoDB: 使用 MongoDB Atlas 作为您的 操作数据层 (ODL) 来托管您的集合。
架构流程
查看架构图,了解品牌放大解决方案的运行方式。
图 2。该架构说明了 MongoDB 的 ODL 如何集成 Leafy Associate应用程序、高级搜索微服务和 Voyage AI嵌入。它在单个聚合管道中运行全文搜索、向量搜索和混合搜索,将实时品牌配置和客户意图结合在统一的现代数据平台中。
0. Siloed data
运营数据通常位于销售点 (POS)、企业资源规划 (ERP) 和市场营销数据孤岛中。将其统一以提供一致的实时体验。
1。在 MongoDB 的操作数据层 (ODL) 中存储统一数据
The ODL 充分利用 MongoDB 灵活的文档模型,将结构化、半结构化和非结构化数据存储在一个位置。
现代数据平台可提供性能、横向可扩展性和高级功能。它可实现快速集成、低延迟查询和扩展实时操作。
这种统一的方法使每个系统(从电商到店内应用)都在相同的可信、最新信息上运行。
2。存储员工输入搜索查询
存储员工使用 Leafy Associate应用程序输入查询。他们选择全文 (MongoDB Atlas Search)、意图 (Vector Search) 或混合(排名融合或分数融合)。
并行:实时品牌放大配置
存储经理和授权人员使用 Leafy Associate应用程序在 brandAmplification集合中创建每个存储的提升规则,以供后端使用。
在配置品牌放大时,他们可以实时观察显示产品数量以及每个类别中有多少产品的元数据。此信息来自$searchMeta管道阶段。
3。和 4。Leafy Associate 构建API请求
Leafy Associate应用程序使用完整上下文编写搜索请求。它直接在前端构建运行时参数,并从MongoDB检索该存储的有效品牌配置。将请求发送到高级搜索微服务。
POST /api/v2/search { "query": "green tea skin care", "storeObjectId": "684aa28064ff7c785a568aca", "option": 4, "page": 1, "page_size": 20, "weightVector": 0.5, "weightText": 0.5, "fusionMode": "rrf",// you can also use "scoreFusion" "brandAmplification": [ { "name": "Innisfree", "boostLevel": 1 }, { "name": "Olay", "boostLevel": 2, "categories": ["Face Care", "Skincare"] }, { "name": "The Body Shop", "boostLevel": 3 } ] }
5。使用 Voyage AI 的嵌入服务
当搜索类型为向量或混合搜索时,微服务会使用Voyage AI生成客户数查询嵌入。
6。和 7。高级搜索微服务构建聚合管道
高级搜索微服务在运行时构建聚合管道并在MongoDB中执行。该微服务使用单个管道和单次往返来提高性能和效率。
对于使用$搜索的文本相关性,管道应用一种复合结构,该结构将must、should和filter子句与模糊匹配和字段提升相结合,以优化结果。
对于使用 $vectorSearch 的语义意图,该管道会将客户数查询与产品数据的预先计算的嵌入进行比较。
在 混合搜索中,微服务使用 $rankFusion(应用基于排名的倒数排名融合 (RRF))或 $scoreFusion(将归一化分数与运行时可调权重混合)来融合文本和向量结果。
品牌放大通过两种互补的途径提高结果相关性:
融合前文本增强(在 $ 搜索中)
以复合形式注入规则。带有
score的should子句。为每个品牌和(可选)类别提供提升。
该微服务通过使用 $ 过滤直接在顶部 上进行筛选,从而保留存储上下文,而无需使用 $lookupProducts.inventorySummary[] 合并其他集合。最后,它生成带有$分面(Facet)的用户界面就绪响应,并返回生成的文档和总数。
8。可靠性、可扩展性、安全和实时一致性
MongoDB通过副本集保持高可用性,并通过分片进行水平扩展。使用专用搜索节点实现低延迟读取。使用 Change Streams 和Atlas Triggers保持数据实时一致。MongoDB通过内置访问权限控制、网络隔离性以及对静态数据进行加密,提供全面的端到端安全性。
构建解决方案
要在自己的环境中重现此演示,请按照以下步骤操作:
在MongoDB Atlas中创建数据库
登录MongoDB Atlas并部署免费套餐集群。创建名为 retail-unified-commerce 的数据库,或更新.env文件(如果使用其他名称)。
导入演示集合
克隆存储库后,导航到包含示例数据的文件夹。
cd retail-unified-commerce/docs/setup/collections
该文件夹包含要导入MongoDB Atlas的JSON文件,MongoDB Atlas 是 500 个示例杂货产品的数据集,具有来自 Voyage AI 的存储级库存和向量嵌入:
inventory.json
products.json
stores.json
BrandAmplification.json
在Atlas中,转到浏览集合。创建每个集合,然后单击添加数据以插入JSON文件中的文档。
配置索引
在 products集合上,创建:
在 Stores集合上,创建地理空间索引。Leafy Associate 使用此索引来显示附近的存储。该索引不会影响品牌放大。
设置实时库存同步(可选)
添加 inventory_sync 和 daily_inventory_simulation Atlas Triggers,将实时更新集成到库存集合中。这些功能模拟实时事务,并使数据与产品集合保持同步。
添加环境变量
将每个 .env.example 文件复制到 前端 和 advanced-search-ms 目录中的 .env。
在 advanced-search-ms/.env 文件中粘贴 Atlas 连接字符串并添加 Voyage AI API 密钥,以启用基于嵌入的搜索。
VOYAGE_API_KEY=your_voyage_api_key
为确保向量比较准确且有意义,请对数据和用户查询使用相同的嵌入提供商。如果切换提供商,则必须重新生成向量、创建新索引、更新.env文件使用新的API密钥,并调整基础架构层中嵌入端口的实现。
使用Docker Compose 构建并运行所有内容
确认已安装Docker和Docker Compose,以及是否位于项目文件夹 retail-unified-commerce 的根目录中。从那里,使用以下命令启动应用。
make build
应用运行后:
打开浏览器并转到 http://localhost:3000 以使用演示应用。查看自述文件,获取使用 Leafy Associate应用程序的分步指南。
在http://localhost:8000/docs查看微服务API文档或阅读自述文件。
在http://localhost:8000/health中查看微服务运行状况。
您可以使用这些命令来控制Docker部署:
停止您的应用:使用以下命令停止所有容器并删除映像:
make clean 查看日志:使用以下命令追踪应用部署和数据移动:
make logs
关键要点
使用MongoDB作为您的操作数据层 (ODL): 统一产品、存储和库存数据,以实现跨每个渠道一致、可衡量且可调整的品牌放大策略。
在运行时构建动态查询:使用MongoDB聚合管道使搜索结果与每个客户数的意图和存储的业务目标保持一致。
实现高级搜索功能:使用MongoDB Atlas Search 和 MongoDB Atlas Vector Search 将全文搜索、矢量搜索和混合搜索结合起来,实时提供上下文感知、与品牌一致的推荐。
作者
Florencia Arin, MongoDB
Angie Guemes Estrada, MongoDB
Prashant Juttukonda, MongoDB
Daniel Jamir, MongoDB
了解详情
个性化零售媒体平台—由MongoDB提供支持。
访问MongoDB for Retail,了解MongoDB如何通过创新解决方案塑造行业。
在此 解决方案库中,学习如何使用MongoDB构建统一视图,从而实现智能搜索并为存储提供支持。
要了解有关使用 MongoDB Atlas 进行 ODL 的更多信息,请阅读 操作数据层白皮书。