MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs Menu
Docs Home
/

エンタープライズ サーバーによる高度な検索

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 と統合するには、次のアプローチを使用できます。

  1. Kubernetes内に配置されたMongoDB Enterprise Edition

  2. Kubernetes外に配置されたMongoDB Enterprise Edition

どちらの配置アーキテクチャでも、Kubernetes内に配置されたMongoDB検索ノードとベクトル検索ノードが必要です。次のセクションでは、それぞれのアプローチについて説明します。

この配置オプションは、デモで使用されるように、MongoDB Enterprise サーバーインスタンスとともにKubernetesクラスター内にMongoDB Searchノードとベクトル検索ノードを直接設定します。この配置により、統合操作が確保され、すべてのコンポーネントが同じ環境に維持されることでマネジメントが簡素化されます。以下の図は、この配置を示しています。

MongoDBと Vyage AIに関連付けられたアプリのストアシステム図

図の 2。Kubernetes内のMongoDB Enterpriseサーバー

このソリューションでは、Kubernetesクラスターはエンタープライズサーバー、検索ノード、およびインベントリアプリケーションをホストします。このアーキテクチャにより、マネジメントが簡素化され、コンポーネント間の効率的なデータ交換が確保されます。

内部エンタープライズサーバー構成で検索ノードを設定する方法の詳細な手順については、MongoDB Enterprise Edition を使用した検索のインストールと使用を参照してください。

この配置オプションでは、 Kubernetes内のMongoDB Search ノードとベクトル検索ノードを構成し、 Kubernetesクラスターの外部に配置された Enterprise Serverレプリカセットに接続します。Kubernetes外でのインフラストラクチャの要件や運用の優先順位がある場合は、このアプローチを使用できます。以下の図は、この配置を示しています。

MongoDBと Vyage AIに関連付けられたアプリのストアシステム図

図の 3。Kubernetes外のMongoDB Enterpriseサーバー

この構成により、既存のエンタープライズ サーバー インフラストラクチャを変更せずに高度な検索機能を統合できます。

外部エンタープライズサーバー構成を使用してMongoDB Searchノードとベクトル検索ノードをインストールする方法に関するステップ別手順については、外部MongoDB Enterprise Editionを使用したMongoDB Searchおよびベクトル検索のインストールと使用を参照してください。

ソリューションを設定および実行するには、以下の手順に従います。

1

MongoDB Enterprise Edition での検索するのインストールと使用 チュートリアルの手順に従って、MongoDB 検索するノードとベクトル検索ノードを配置します。

2

必要なデータ ダンプとアプリケーション構成については、デモリポジトリ:をダウンロードしてください。

git clone https://github.com/mongodb-industry-solutions/retail-unified-commerce

ダンプファイルディレクトリにGo。

cd ./retail-unified-commerce/docs/setup
3

サンプル保存の在庫データを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
4

接続文字列で 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_searchproduct_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,
},
];
5

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

6

MongoDB Search オプションを選択し、製品名と完全に一致しないクエリを入力します。例、「」のようなタームを使用したり、クッキーのようなタームを使用したりします。これらのクエリは、入力が不正確な場合に関連する結果を返すシステムの能力を示しています。

検索する機能の結果

図の 4。お茶の検索結果

セマンティックを理解するには、 MongoDB ベクトル検索オプションに切り替えます。10 月 日のドキュメントや高プロンプトのプライマリ メニューなど、記述のあるクエリまたはインテント ベースのクエリを使用します。システムは、使用された単語だけでなく、クエリの意味に応じた結果を表示します。

10 秒のドキュメントのベクトル検索結果

図の 5。10 秒のドキュメントのベクトル検索結果

どちらの結果でも、各製品カードの左上に表示される検索スコアを確認できます。このスコアは、結果のクエリに対する関連性を示します。

  • オンプレミス配置は戦略的に重要です: オンプレミス配置は、データ主権と制御を重視する業界や組織にとって引き続き重要です。このpublic preview、組織はオンプレミス環境にAIを採用し、競合性を維持し、コンプライアンス要件を満たできるようになります。

  • スタックの簡素化により、 AI の導入が促進されます。MongoDB Search とベクトル検索をEnterprise サーバーと組み合わせることで、多様なテクノロジーを統合し、強力なAIアプリケーションを実現し、アーキテクチャの複雑さを軽減し、運用データを移行せずにスマートな検索クエリが可能になります。

  • 高度な検索機能により、ユーザー エクスペリエンスが向上します。全文検索とベクトル検索により、ユーザーが情報を検索してアクセスする方法が改善され、さまざまな業界でより直感的なエクスペリエンスが向上します。

  • Angie Guemes Estrada, MongoDB

  • ロドリールール、 MongoDB

  • Prashant Juttukonda, MongoDB

戻る

統合トランザクション

項目一覧