MongoDB のデータ基礎と高度な検索機能を使用して、製品検出ブランドと戦略の間でパーソナライズさリアルタイムリアルタイムの整合性を提供します。
ユースケース: インテリジェント検索、シングルビュー、カタログ
業種: 小売
製品およびツール: MongoDB Atlas、MongoDB Atlas Search、MongoDB Atlas Vector Search、MongoDB Node.jsドライバー、MongoDB Pythonドライバー、MongoDB Voyage AI
ソリューション概要
製品、プロモーション、コンフィギュレーションの変更で埋められた世界では、異なる目的と選挙の目的を提供するモデルが常に変化するカタログに、各カスタマーの固有のニーズをどのように接続するかという主要な問題に対応しています。
この問題を解決するには、静的かつ
このソリューションでは、データとテクノロジーを使用してカスタマーの意向を小売ターゲットに調整することで、ブランド展開戦略を実装する方法を学びます。
MongoDBと高度な検索によって強化された Leafy 関連アプリ を使用すると、店舗関連リクエストは特定のもの、優先順位ベース、または一般的な推奨事項など、カスタマーリクエスト に即座に対応できます。
各検索は 1 つのパーソナライズされたクエリになります。結果はホッパーと関連性があり、マネージャーがリアルタイムで更新する保存に関するブランドの優先順位と一致します。
図の 1。MongoDB替え
これらはすべてMongoDBで実行され、コンシステントで安全かつ高パフォーマンスの結果が得られます。
その仕組みを調べてみましょう。
データモデルアプローチ
スキーマ設計プロセス
アプリの規模が大きくなるにつれてスキーマとパフォーマンスの問題が生じるのを防ぐには、 健全なデータ モデリング から始めてください。
このソリューションでは、4 つのコア コレクションの周囲の統合データレイヤーをモデル化します。
products: 製品カタログ(名前、説明、カテゴリ、識別子)。inventory: 株式レベル、再追加データ、予測メトリクス。stores:メタデータの保存する(名前、ロケーション、運用の詳細)。brandAmplification: 店舗ごとのブランド/カテゴリのブースト ルール。
このプロセスに沿って、会社のエンタープライズと増やすを確実に実装します。
アプリケーションのワークロードを特定する
トップ クエリを使用して、効果的なインデックスを選択し、データベースの呼び出しを減らします。
eコマースと保存の両方が同じ運用データを消費するとします。
カスタマーの意図をリアルタイムでブランド戦略とつなげ、チャンネル全体で在庫のコンシステントを維持します。
次の表を使用して、リーフィーアソシエイトのワークロードを見積もり、この推定値を読み取り/書き込み (write)優先順位のベースラインとして扱います。
アクションクエリ タイプターゲット コレクション頻度優先順位ノートストア内の製品検出。カスタマーのリクエストに一致する製品を検索し(テキスト / 意向 / ハイブリッド検索)、この保存に現在株式があるかどうかを示します。(50 店舗)
読み取り
Products,inventory~500K/日
重要
メインフローを関連付けます。$lookup を回避するために、各製品に保存ごとの在庫概要フラグを埋め込みます
eコマース 検索する。仕様、意向、またはハイブリッドで検索する(6K 製品)
読み取り
Products~1M/日
重要
オンライン検出をドライバーし、 低レイテンシ を維持する必要があります。専用検索するノードまたは読み取り分離検索するノードを検討してください
ランキングのためにブランドブーストを適用する
読み取り
brandAmplification~300k/日
高
ランキング時に適用される保存レベルのブランドブースト、製品の更新は必要ありません
ライブ在庫と予測メトリクス(Ingest)の更新
書込み
inventory~700k/日
重要
レコードの在庫システム(店舗および倉庫)からの単一ビュー。小規模で頻繁な書き込み
株式のある最も近い代替保存 (する)の検索
読み取り
inventory,stores~100k/日
低
距離順の地理空間ランク
マーケットプレイス 機能の設定(更新 ブースト戦略)
書込み
brandAmplification>500/日
低
任意のカテゴリ スコープを持つ保存ごとのモデル ブースト。ランタイムは調整可能で、製品の書き換えはありません。
スキーマの関係をマッピングする
識別するワークロードは、スキーマの設計方法に影響します。
マーケットプレイスでは、関係モデルによって Leafy As associated とeコマースアプリの読み取りレイテンシが決定され、在庫システムの書込み操作のコストに影響します。
クエリの最適化
店舗内の商品検出を向上させるには、埋め込みパターンを使用して商品内に
inventorySummary[]を埋め込みます。このアプローチでは、1 回の読み取り操作で製品の詳細と可用性が返され、コストのかかる $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 } ] } 最適化された運用インベントリのシングルビュー クエリでは、詳細な在庫 データを別のコレクションに保存し、製品を参照。製品ごとに 1 つのドキュメントを保存して、チャンネルと店舗全体で単一のビューを維持し、在庫を 1 つの場所で更新します。次のコード スニペットは、
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ポイントに店舗座標を保存して、地理空間クエリを実行します。次のコード スニペットは、
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" } インデックスの作成
最も一般的なクエリ フィールドにインデックスを作成します。詳細については、「ソリューションをビルドする」セクションを表示してください。増やすに応じてインデックスの使用状況をモニターおよび調整します。
参照アーキテクチャ
4 つのコア コンポーネントで構築されたブランド構築を構築します。
メインアプリケーションの関連付け : Next.js でビルドされた メインアプリケーション は、 UIと ユーザー インタラクションを取り扱います。公式ドライバーを使用してMongoDBに接続し、Advanced Searchマイクロサービスを呼び出します。
Advanced Search マイクロサービス: 検索専用のPythonバックエンド。テキスト検索、ベクトル検索、およびハイブリッド検索にMongoDB集計パイプラインを使用し、埋め込みには MongoDB AIを使用します。
Voyage AI埋め込みサービス: セマンティック検索クエリ用のベクトル埋め込みをリアルタイムで生成する外部APIです。
アーキテクチャフロー
アーキテクチャ図を表示して、製品を起動するソリューションがどのように動作するかを理解します。
図の 2。このアーキテクチャは、MongoDB の ODL が Leafy Associate アプリケーション、高度な検索マイクロサービス、およびボヤージュ AI 埋め込みを統合する方法を示しています。統合された最新のデータプラットフォームにリアルタイムでの商品構成とカスタマー意向を組み合わせて、単一の集計パイプライン内で全文検索、ベクトル、ハイブリッド検索を実行します。
0. Siloed data
運用データは、多くの場合、販売時点情報管理(POS)、エンタープライズ リソース プランニング(ERP)、マーケティングなどのサイロに存在します。それを統合して、コンシステントなリアルタイムエクスペリエンスを提供します。
1。統合データを MongoDB の運用データ層(ODL)に保存
ODL は MongoDB の flexible document model のフル機能を使用して、構造化データ、半構造化データ、非構造化データを 1 つの場所にまとめて保存します。
最新のデータプラットフォームは、パフォーマンス、水平スケーラビリティ、高度な機能を提供します。これにより、高速統合、低レイテンシのクエリ、大増やすなリアルタイム操作が可能になります。
この統合アプローチにより、eコマースから店舗内アプリまでのすべてのシステムが、同じ信頼できる最新情報で稼働し続けます。
2。店舗スタッフは検索クエリを入力します
店舗の関連付けは、 Leafy 関連アプリケーションを使用してクエリを入力します。[ MongoDB Atlas Search ]、全文( MongoDB Atlas Search )、意向( ベクトル検索 )、またはハイブリッド(ランク 統合、スコア 統合)を選択します。
並行: リアルタイムのブランド展開構成
ストア マネージャーと権限のある担当者は、Leafy アプリケーションを使用して、バックエンドで使用するためにbrandAmplificationコレクションに店舗ごとのブーストルールを作成します。
マーケットプレイスを構成する際に、各カテゴリにある製品の数とその数を示すメタデータをリアルタイムで観察できます。この情報は、$searchMetaパイプラインステージから取得されます。
3。と 4Leafy アソシエイトはAPIリクエストをビルドする
Leafy アプリケーションは、完全なコンテキストを持つ検索するリクエストを作成します。フロントエンドでランタイム パラメータを直接ビルドし、MongoDBからその保存のアクティブなブランド構成を検索します。Advanced Search マイクロサービスにリクエストを送信します。
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。投票AIによる埋め込みサービス
検索タイプがベクトルまたはハイブリッド検索の場合、マイクロサービスは 投票AI を使用してカスタマークエリ埋め込みを生成します。
6。と 7Advanced Search マイクロサービスが集計パイプラインをビルドする
Advanced Search マイクロサービスは実行時に集計パイプラインをビルドし、MongoDB内で実行します。このマイクロサービスは、単一のパイプラインと単一のラウンドトリップを使用して、パフォーマンスと効率 を向上させます。
$search を使用してテキスト関連性を高めるために、パイプラインは must、should 、filter 句とファジー一致とフィールドのブーストを組み合わせた複合構造を適用し、結果を絞り込みます。
$vectorSearch を使用するセマンティックの目的で、パイプラインはカスタマーのクエリを製品データの事前計算された埋め込みと比較します。
ハイブリッド検索では、マイクロサービスはテキストとベクトルの結果を統合します。これはランクベースのレプリカ ランク統合(RRIF)を適用する $rankFsion 、または実行時に調整可能な重みと正規化されたスコアを組み合わせた $scoreField を使用します。
MongoDB Atlas は、2 つの補完的なパスを通じて結果の関連性を向上させます。
マイクロサービスは、上位の を $filter で直接フィルタリングすることで、 $lookupProducts.inventorySummary[] を使用して他のコレクションをマージすることなく保存コンテキストを維持します。最後に、 $ファセットによってUI対応の 応答が生成され、結果のドキュメントと合計数の両方が返されます。
8。信頼性、スケーラビリティ、セキュリティ、リアルタイム整合性
MongoDB はレプリカセット によって高可用性を維持し、シャーディングによって水平方向にスケーリングします。低レイテンシ読み取りには、専用の検索ノードを使用します。Change Streams と Atlas Triggers を使用して、 データをコンシステント にリアルタイムで保ちます。MongoDB は、組み込みのアクセス制御、ネットワーク分離、および保管中、転送中、使用中のデータにわたる暗号化を通じて、包括的なエンドツーエンドのセキュリティを提供します。
ソリューションのビルド
このデモを自分の環境で再現するには、次の手順に従います。
MongoDB Atlasでデータベースを作成する
MongoDB Atlasにサインインし、無料階層クラスターを配置します。retail-unified-commerce という名前のデータベースを作成するか、.env を更新する別の名前を使用する場合は、 ファイルを使用します。
ソリューションリポジトリの複製
次のコマンドを使用して GitHubリポジトリをクローンします。
git clone https://github.com/mongodb-industry-solutions/retail-unified-commerce.git
デモ コレクションのインポート
リポジトリをクローンした後、サンプルデータのある フォルダーに移動します。
cd retail-unified-commerce/docs/setup/collections
フォルダーには、 MongoDB AtlasにインポートするJSONファイルが含まれています。これは、Voyage AIからのベクトル埋め込みとストアレベルの在庫を持つ 500 食料品のサンプルデータセットです。
inventory.json
product.json
stores.json
teamAmpliification.json
Atlas で、コレクション に移動します。各コレクションを作成し、Add Data(データの追加) をクリックしてJSONファイルからドキュメントを挿入します。
インデックスを構成する
製品コレクションに、次のアイテムを作成します。
店舗コレクションに、地理空間インデックスを作成します。Leafy はこのインデックスを使用して近くの保存 (する)を表示します。インデックスは製品の使用数には影響しません。
在庫のリアルタイム同期の設定(任意)
MongoDB Atlas Triggers と daily_inventary_simpleMongoDB Atlas Triggers を追加して、 在庫コレクションのリアルタイム更新を統合します。これらの機能はライブトランザクションをシミュレートし、データを 製品コレクションと同期させます。
環境変数を追加する
フロントエンド と advanced-search-ms ディレクトリの両方にある各 .env.exampleファイルを.env にコピーします。
Atlas接続文字列を貼り付け、advanced-search-ms/.envファイルに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 関連アプリケーション の操作に関するステップ別ガイドについては、README を参照してください。
http://localhost:8000/docs でマイクロサービスAPIdocsを表示するか、README をお読みください。
http://localhost:8000/Health でマイクロサービスのヘルスを表示します。
次のコマンドを使用して、 Docker配置を制御できます。
アプリを停止 : すべてのコンテナを停止し、次のコマンドを使用してイメージを除く。
make clean ログを表示: 次のコマンドを使用してアプリの配置とデータの移動を追跡します。
make logs
キーポイント
MongoDB を操作データ層(ODL)として使用する: 製品、保存、在庫データを統合して、すべてのチャンネルにわたってコンシステントで測定可能かつ調整可能なブランド拡大戦略を可能にします。
実行時に動的クエリをビルドする: MongoDB集計パイプラインを使用して、検索結果を各カスタマーの意向とストアのビジネス目的で整合させます。
高度な検索機能を実装する: MongoDB Atlas Search と Atlas Vector Search を使用して、全文検索、ベクトル検索、およびハイブリッド検索を組み合わせ、コンテキストに対応したブランドに沿った推奨事項をリアルタイムで提供します。
作成者
Florencia Arin, MongoDB
Angie Guemes Estrada, MongoDB
Prashant Juttukonda, MongoDB
MongoDB、 MongoDB
詳細
パーソナライズされた小売メディア プラットフォーム — MongoDB.
MongoDB for Retail をご覧ください。MongoDBがイノベーションを通じてどのように業界を形成しているかを確認してください。
この ソリューション ライブラリでは、MongoDBを使用して統合ビューをビルドし、スマート検索を可能にし、店舗スタッフを強化する方法を学びます。
MongoDB Atlasでの ODL の詳細については、 「操作データ層」 のホワイトペーパーをお読みください。