MongoDB は、自己管理型インフラ上でエンタープライズの検索機能を持つAI駆動型アプリケーションを可能にします。
ユースケース: 人工知能、インテリジェント検索
業種: 小売
製品: MongoDB Search と Enterprise Server、 MongoDB ベクトル検索と Enterprise Server、 MongoDB Enterprise Server
ソリューション概要
クラウド導入が加速されても、多くのカスタマーは、特に高度に規制された業界では、自己管理型インフラストラクチャとオンプレミス配置を選択しています。インスタンス、この調査 によると、政府の 93% がオンプレミス配置を使用している組織が、IT セカンダリの組織の 91%、金融セカンダリの 90% を使用しています。さらに、数規模の小売業者や地域の食料品チェーンなどの多くの SME は、クラウドアーキテクチャを採用するためのコストが高く、オンプレミス配置を使用しています。
自己管理型インフラストラクチャは柔軟性、コンプライアンス制御、データ所有権を提供しますが、AI強化ソリューションを実装しようとしている組織には挑戦が生じます。これらの挑戦には、次のようなものがあります。
アーキテクチャの複雑さ:ベクトル検索のような高度な検索機能を実現するために、会社は多くの場合、個別の検索エンジンとベクトルデータベースを組み合わせます。
運用上の限界: チームは、個別のテクノロジーを同期し、さまざまなリソースを管理し、複数のシステム間でコンシステントなワークフローを維持するのに最善を尽くします。
これらの障害に対処するために、 MongoDB はMongoDB Enterprise サーバー で 検索 と ベクトル検索 を導入しました。これらの検索する機能により、次のことが可能になります。
任意のインフラストラクチャ上に次世代のAIアプリをビルドする: アーキテクチャの複雑さを軽減することで、AIベースのソリューションの開発が容易になり、複数の単一目的テクノロジーが不要になります。
すべての場所でコンシステントなエクスペリエンスを提供: アプリケーションが接続されている場所に関係なく、同じMQL APIを使用します。これにより、競合が軽減され、本番環境と開発環境の間を移動する際の柔軟性が向上します。
このソリューションは、 MongoDB Search とベクトル検索を使用して、ユーザーが全文検索またはベクトル埋め込みを基盤としたセマンティック検索のいずれかを使用して、食料品店内の製品を見つけられるようにするデモを示します。MongoDB Enterprise サーバーと検索するノードを備えた環境でデモを実行するための前提条件、アーキテクチャ要件、ステップ別手順が含まれています。
図の 1。デモのランディング ページ
リファレンスアーキテクチャ
エンタープライズサーバーで高度な検索機能を使用するには、KubernetesクラスターにMongoDB検索ノードとベクトル検索ノードを配置する必要があります。これにより、ベクトル埋め込みを基盤とした全文検索とセマンティック検索が可能になり、ユーザーは説明やセマンティック類似性に基づいてアイテムを見つけることができます。
既存のデータベースを移行する 必要はありません。MongoDB 8.0.10 を実行している MongoDB Enterprise Edition を使用するバージョン以降で、Kubernetesクラスター内または外部で実行されるようにします。Kubernetes演算子はこれらの検索ノードを管理し、配置ロケーションに関係なく、データベースクラスターに安全に接続します。
要約すると、 MongoDB Search とベクトル検索 をEnterprise Server と統合するには、次のアプローチを使用できます。
Kubernetes内に配置されたMongoDB Enterprise Edition
Kubernetes外に配置されたMongoDB Enterprise Edition
どちらの配置アーキテクチャでも、Kubernetes内に配置されたMongoDB検索ノードとベクトル検索ノードが必要です。次のセクションでは、それぞれのアプローチについて説明します。
MongoDB Enterprise Edition を使用した検索 Kubernetes 内へのインストール
この配置オプションは、デモで使用されるように、MongoDB Enterprise サーバーインスタンスとともにKubernetesクラスター内にMongoDB Searchノードとベクトル検索ノードを直接設定します。この配置により、統合操作が確保され、すべてのコンポーネントが同じ環境に維持されることでマネジメントが簡素化されます。以下の図は、この配置を示しています。
図の 2。Kubernetes内のMongoDB Enterpriseサーバー
このソリューションでは、Kubernetesクラスターはエンタープライズサーバー、検索ノード、およびインベントリアプリケーションをホストします。このアーキテクチャにより、マネジメントが簡素化され、コンポーネント間の効率的なデータ交換が確保されます。
内部エンタープライズサーバー構成で検索ノードを設定する方法の詳細な手順については、MongoDB Enterprise Edition を使用した検索のインストールと使用を参照してください。
MongoDB Enterprise Edition を使用Kubernetesた検索のインストール
この配置オプションでは、 Kubernetes内のMongoDB Search ノードとベクトル検索ノードを構成し、 Kubernetesクラスターの外部に配置された Enterprise Serverレプリカセットに接続します。Kubernetes外でのインフラストラクチャの要件や運用の優先順位がある場合は、このアプローチを使用できます。以下の図は、この配置を示しています。
図の 3。Kubernetes外のMongoDB Enterpriseサーバー
この構成により、既存のエンタープライズ サーバー インフラストラクチャを変更せずに高度な検索機能を統合できます。
外部エンタープライズサーバー構成を使用してMongoDB Searchノードとベクトル検索ノードをインストールする方法に関するステップ別手順については、外部MongoDB Enterprise Editionを使用したMongoDB Searchおよびベクトル検索のインストールと使用を参照してください。
ソリューションのビルド
ソリューションを設定および実行するには、以下の手順に従います。
MongoDB 検索するノードとベクトル検索ノードを配置する
MongoDB Enterprise Edition での検索するのインストールと使用 チュートリアルの手順に従って、MongoDB 検索するノードとベクトル検索ノードを配置します。
リポジトリの複製
必要なデータ ダンプとアプリケーション構成については、デモリポジトリ:をダウンロードしてください。
git clone https://github.com/mongodb-industry-solutions/retail-unified-commerce
ダンプファイルディレクトリにGo。
cd ./retail-unified-commerce/docs/setup
デモ データのインポート
サンプル保存の在庫データをMongoDB配置にインポートします。
次のコマンドを実行することで、接続文字列を検索します。<SECRET_NAME> を、配置中に生成された適切な kubernetes secret 名に置き換えます。
kubectl get secret -n ${MDB_NS} <SECRET_NAME> -o yaml
このコマンドは、シークレットメタデータとそのエンコードされた内容を出力します。connectionStringStandard 値をコピーし、次のコマンドを実行して接続文字列を取得します。
echo "<Base64EncodedConnectionString>" | base64 --decode
次のコマンドを実行して、collections ダンプ フォルダーからデータベースを復元します。
mongorestore --uri "<CONNECTION_STRING>" ./collections
MongoDB Search およびベクトル検索インデックスの作成
接続文字列で mongosh を開き、クラスターに接続します。
mongosh "<CONNECTION_STRING>" use retail-unified-commerce
次のコマンドを実行して、MongoDB 検索インデックスを作成します。
db.products.createSearchIndex("product_atlas_search", { "mappings": { "dynamic": false, "fields": { "brand": { "type": "string" }, "category": { "type": "string" }, "inventorySummary": { "fields": { "storeObjectId": { "type": "objectId" } }, "type": "document" }, "productName": { "type": "string" }, "subCategory": { "type": "string" } } } })
次のコマンドを実行して、 MongoDB ベクトル検索インデックスを作成します。
db.products.createSearchIndex({ name: "product_text_vector_index", type: "vectorSearch", definition: { fields: [ { type: "vector", path: "textEmbeddingVector", numDimensions: 1024, similarity: "cosine" }, { type: "filter", path: "inventorySummary.storeObjectId" }, { type: "filter", path: "inventorySummary.inStock" } ] } })
次のコマンドを実行して、両方のインデックスが正しく作成されたことを確認します。成功させた場合、コマンドは product_atlas_search と product_text_vector_index のメタデータを返します。
JSON.stringify(db.runCommand({listSearchIndexes: "products"}), null, 2)
次のクエリを使用してインデックスをテストします。
db.products.aggregate([ { "$search": { "index": "product_atlas_search", "compound": { "should": [ { "text": { "query": "Chicken Masala", "path": ["productName", "brand", "category", "subCategory"], "fuzzy": { "maxEdits": 2 }, } } ] }, } }, { $project: { productName: 1, score: { $meta: "searchScore" } } }, { $limit: 2 } ])
このクエリは、製品名とその検索スコアのリストを返します。
[ { _id: ObjectId("685bfe2d3d832cf7e1614edc"), productName: "Chicken Masala", score: 8.192384719848633, }, { _id: ObjectId("685bfe2e3d832cf7e16159fe"), productName: "Shahi Chicken Masala", score: 7.7956156730651855, }, ];
構成とデモの実行
backend/advanced-search-msディレクトリに .envファイルを作成し、frontendディレクトリに別のファイルを作成します。これらのディレクトリに .env.templateファイルがあり、以前に検索した接続文字列でプレースホルダーを更新します。
追加のコンテキストと任意の設定については、GitHub リポジトリの README を参照してください。
デモはローカルまたはKubernetesに配置することができます。
次のコードを実行します。
make build
希望する方法を使用して、フロントエンドサービスとバックエンドサービスにアクセスできることを確認します。次に、http://localhost:3000/product-inventory でブラウザを開きます。
デモ用にビルドされたDockerイメージを使用して、Kubernetesクラスター内でバックエンドとフロントエンドを実行します。次の手順に従います。
1。Dockerイメージのビルドするとプッシュ
次のコマンドを実行して、バックエンドとフロントエンドのイメージをビルドしてコンテナレジストリにプッシュします。
Backend docker build --platform linux/amd64 -t retail-backend:latest ./backend/advanced-search-ms docker tag retail-backend:latest <YOUR_REGISTRY>/retail-backend:latest docker push <YOUR_REGISTRY>/retail-backend:latest Frontend docker build --platform linux/amd64 -t retail-frontend:latest ./frontend docker tag retail-frontend:latest <YOUR_REGISTRY>/retail-frontend:latest docker push <YOUR_REGISTRY>/retail-frontend:latest
マシンのアーキテクチャによっては、--platform linux/amd64 フラグが必要になる場合があります。
2。kubernetes secretの作成
機密値を、retail-unified-commerce/k8s フォルダー内の retail-secrets.yaml という名前のkubernetes secretファイルに保存します。ソース管理に実際の認証情報をコミットしないでください。以下は、テンプレートの例です。
# retail-unified-commerce/k8s/retail-secrets.yaml apiVersion: v1 kind: Secret metadata: name: retail-secrets namespace: default type: Opaque data: NEXT_PUBLIC_GOOGLE_MAPS_API_KEY: VOYAGE_API_KEY: stringData: MONGODB_URI: <YOUR_CONNECTION_STRING> DB_NAME: "retail-unified-commerce" NEXT_PUBLIC_COLLECTION_PRODUCTS: "products" NEXT_PUBLIC_COLLECTION_INVENTORY: "inventory" NEXT_PUBLIC_COLLECTION_STORES: "stores" SEARCH_INDEX: "product_atlas_search" NEXT_PUBLIC_BACKEND_ENDPOINT: "<YOUR_BACKEND_ENDPOINT>" NEXT_PUBLIC_ENABLE_ATLAS_SEARCH: "true" NEXT_PUBLIC_ENABLE_VECTOR_SEARCH: "true" NEXT_PUBLIC_ENABLE_HYBRID_SEARCH: "true" NEXT_PUBLIC_ENABLE_FULLTEXT_SEARCH: "true" MONGODB_DATABASE: "retail-unified-commerce" PRODUCTS_COLLECTION: "products" SEARCH_TEXT_INDEX: "product_atlas_search" SEARCH_VECTOR_INDEX: "product_text_vector_index" NEXT_PUBLIC_SEARCH_META_INDEX: "product_atlas_search_meta" EMBEDDING_FIELD_NAME: "textEmbeddingVector" VOYAGE_API_URL: "https://api.voyageai.com/v1" VOYAGE_MODEL: "voyage-3-large"
シークレットをクラスターに適用します。
kubectl apply -f k8s/retail-secrets.yaml
3。バックエンドとフロントエンドを配置する
backend-deployment.yaml のテンプレートを /k8sディレクトリに配置します 。
# retail-unified-commerce/k8s/backend-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: retail-backend spec: replicas: 2 selector: matchLabels: app: retail-backend template: metadata: labels: app: retail-backend spec: containers: - name: backend image: <YOUR_REGISTRY>/retail-backend:latest ports: - containerPort: 8000 envFrom: - secretRef: name: retail-secrets apiVersion: v1 kind: Service metadata: name: retail-backend-service spec: type: LoadBalancer selector: app: retail-backend ports: - port: 80 targetPort: 8000
frontend-deployment.yaml のテンプレートを /k8sディレクトリに配置します 。
# retail-unified-commerce/k8s/frontend-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: retail-frontend spec: replicas: 2 selector: matchLabels: app: retail-frontend template: metadata: labels: app: retail-frontend spec: containers: - name: frontend image: <YOUR_REGISTRY>/retail-frontend:latest ports: - containerPort: 3000 envFrom: - secretRef: name: retail-secrets apiVersion: v1 kind: Service metadata: name: retail-frontend-service spec: type: LoadBalancer selector: app: retail-frontend ports: - port: 80 targetPort: 3000
Kubernetes配置を次のように適用します。
kubectl apply -f k8s/backend-deployment.yaml kubectl apply -f k8s/frontend-deployment.yaml
配置を確認します。
kubectl get pods -o wide kubectl get svc -o wide
フロントエンドとバックエンドサービスに EXTERNAL-IP が割り当てられるまで待ちます。
4。デモにアクセスする
フロントエンドサービスの外部IPが表示されたら、次のリンクを使用してサービスを開きます: http://<EXTERNAL-IP>/product-inventory。
デモの検索する機能を調べる
MongoDB Search オプションを選択し、製品名と完全に一致しないクエリを入力します。例、「」のようなタームを使用したり、クッキーのようなタームを使用したりします。これらのクエリは、入力が不正確な場合に関連する結果を返すシステムの能力を示しています。
図の 4。お茶の検索結果
セマンティックを理解するには、 MongoDB ベクトル検索オプションに切り替えます。10 月 日のドキュメントや高プロンプトのプライマリ メニューなど、記述のあるクエリまたはインテント ベースのクエリを使用します。システムは、使用された単語だけでなく、クエリの意味に応じた結果を表示します。
図の 5。10 秒のドキュメントのベクトル検索結果
どちらの結果でも、各製品カードの左上に表示される検索スコアを確認できます。このスコアは、結果のクエリに対する関連性を示します。
キーポイント
オンプレミス配置は戦略的に重要です: オンプレミス配置は、データ主権と制御を重視する業界や組織にとって引き続き重要です。このpublic preview、組織はオンプレミス環境にAIを採用し、競合性を維持し、コンプライアンス要件を満たできるようになります。
スタックの簡素化により、 AI の導入が促進されます。MongoDB Search とベクトル検索をEnterprise サーバーと組み合わせることで、多様なテクノロジーを統合し、強力なAIアプリケーションを実現し、アーキテクチャの複雑さを軽減し、運用データを移行せずにスマートな検索クエリが可能になります。
高度な検索機能により、ユーザー エクスペリエンスが向上します。全文検索とベクトル検索により、ユーザーが情報を検索してアクセスする方法が改善され、さまざまな業界でより直感的なエクスペリエンスが向上します。
作成者
Angie Guemes Estrada, MongoDB
ロドリールール、 MongoDB
Prashant Juttukonda, MongoDB
詳細
KubernetesクラスターにMongoDB Search とベクトル検索を配置するには、MongoDB Search とベクトル検索を配置する。
MongoDB Community Edition および MongoDB Enterprise Server で使用する検索およびベクトル検索機能の詳細については、自己管理型アプリを検索およびベクトル検索機能で強化する方法をお読みください。
MongoDB が小売のイノベーションを実現する方法については、 MongoDB for Retailをご覧ください。