AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

MongoDB Search とベクトル検索の使用

MongoDBSearchリソースを正常にインストールすると、 MongoDB Search とベクトル検索インデックスを mdb-user として作成し、インデックスを使用してMongoDB Search とベクトル検索クエリを実行できます。このページでは、サンプルデータのロード、データ用のMongoDB Search およびベクトル検索インデックスの作成、データに対してMongoDB Search およびベクトル検索クエリを実行する方法について説明します。

MongoDB Search とベクトル検索を使用するには、次のものが必要です。

1

この手順の後続のステップで使用する環境変数を設定するには、以下をコピーし、環境変数の値を設定してから、環境変数をロードします。

# The env vars here are all commented out because this snippets module# is reusable across different MongoDB deployments and all the necessary variables# should be already defined there. # set it to the context name of the k8s cluster#export K8S_CTX="<local cluster context>"# the following namespace will be used to deploy mongodb tools pod#export MDB_NS="mongodb" # regular user performing restore and search queries on sample mflix database# the user should be able to restore database using mongorestore#export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME" # name of MongoDB or MongoDBCommunity resource in case it's deployed in the same cluster# user only for the connection string in MDB_CONNECTION_STRING env var below#export MDB_RESOURCE_NAME="mdbc-rs" # default connection string if MongoDB database is deployed using the operator#export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_RESOURCE_NAME}-0.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local:27017/?replicaSet=${MDB_RESOURCE_NAME}"
2

mongodb-tools-pod という名前のポッドを配置して、 Kubernetesクラスター内から mongosh や mongorestore などのMongoDBクライアントツールを実行します。クラスター内でポッドを実行すると、データベースを外部に公開する必要なく、 MongoDBへの接続が簡素化されます。

次のコマンドは、 MongoDB Community Server イメージを実行する mongodb-tools-pod という名前のポッドを配置します。ポッドは sleep infinity コマンドで実行中され、kubectl exec でMongoDBクライアントツールを実行できるようになります。

kubectl apply -n "${MDB_NS}" --context "${K8S_CTX}" -f - <<EOFapiVersion: v1kind: Podmetadata: name: mongodb-tools-pod labels: app: mongodb-toolsspec: containers: - name: mongodb-tools image: mongodb/mongodb-community-server:${MDB_VERSION}-ubi8 command: ["/bin/bash", "-c"] args: ["sleep infinity"] restartPolicy: NeverEOF echo "Waiting for the mongodb-tools to be ready..."kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait \ --for=condition=Ready pod/mongodb-tools-pod --timeout=60s
3

次のコレクションを含む sample_mflixデータベースをインポートします。

コレクション名
説明

comments

特定の映画に関連付けられたコメントが含まれます。

embedded_movies

次の追加フィールドを持つ、moviesコレクションの Western、Action、Fantasy ジャンルの映画の詳細が含まれます。

  • plot_embedding_voyage_3_large - Voyage AI の voyage-3-large 埋め込みモデルを使用して plot フィールドから作成された 2048 次元の埋め込みを含み、効率的な保存および検索のために binData に変換されています。

  • plot_embedding - OpenAI の text-embedding-ada-002 埋め込みモデルを使用して plot フィールドから作成された 1536 次元の埋め込みを含み、効率的な保存および検索のために binData に変換されています。

movies

公開年、監督、レビューなどの映画情報が含まれています。

sessions

メタデータ フィールド。ユーザーの JSON Web トークンが含まれます。

theaters

映画館のロケーションが含まれています。

users

ユーザー情報が含まれています。

次のコマンドはサンプルデータセットをダウンロードし、mongorestore を使用してMongoDBデプロイの sample_mflixデータベースにデータを読み込み、mdb-user として接続します。

kubectl exec -n "${MDB_NS}" --context "${K8S_CTX}" \ mongodb-tools-pod -- /bin/bash -eu -c "$(cat <<EOFecho "Downloading sample database archive..."curl https://atlas-education.s3.amazonaws.com/sample_mflix.archive \ -o /tmp/sample_mflix.archiveecho "Restoring sample database"mongorestore \ --archive=/tmp/sample_mflix.archive \ --verbose=1 \ --drop \ --nsInclude 'sample_mflix.*' \ --uri="${MDB_CONNECTION_STRING}"EOF)"
4

MongoDB Search またはベクトル検索インデックスを作成できます。$search および $searchMeta クエリを実行するにはMongoDB Searchインデックスを作成し、$vectorSearch クエリを実行するにはベクトル検索インデックスを作成する必要があります。

  • MongoDB Search は、動的および静的フィールドマッピング、さまざまなアナライザ(標準、言語固有、カスタム)、シノニム(同意語)やファセット検索などの機能をサポートする柔軟なインデックス定義を提供します。詳しくは、「 インデックスの定義 」を参照してください。

  • ベクトル検索 はAnn および ENN 検索アルゴリズムを使用することで、セマンティック類似性に基づいてデータへのベクトル埋め込みのクエリをサポートする簡単なインデックス定義を提供します。詳細については、 「ベクトル検索インデックスの定義」 を参照してください。

  1. ターミナルで次のコマンドをコピー、貼り付け、実行してMongoDB Search またはベクトル検索インデックスを作成します。

    コマンドは kubectl exec を使用して mongodb-tools-pod で mongosh を実行します。sample_mflix db.<collection>.createSearchIndex() メソッドに接続してインデックスを作成します。

    次のコマンドは、moviesコレクションに動的マッピングを含む、default という名前のMongoDB Searchインデックスを作成します。動的マッピングにより、動的にインデックス付け可能なすべてのフィールドタイプが自動的にインデックス化されます。

    kubectl exec --context "${K8S_CTX}" -n "${MDB_NS}" mongodb-tools-pod -- \ mongosh --quiet \ "${MDB_CONNECTION_STRING}" \ --eval "use sample_mflix" \ --eval 'db.movies.createSearchIndex("default", { mappings: { dynamic: true } });'
  2. インデックスの作成が完了するまで待ちます。

    インデックス作成は非同期プロセスです。次のスクリプトを実行して、インデックスの作成が完了するまで 60 秒待ちます。

    # Currently it's not possible to check the status of search indexes, we need to just waitecho "Sleeping to wait for search indexes to be created"sleep 60

    または、次のコマンドを実行して、コレクションのインデックスのリストを取得します。

    kubectl exec --context "${K8S_CTX}" -n "${MDB_NS}" mongodb-tools-pod -- \ mongosh --quiet "${MDB_CONNECTION_STRING}" \ --eval "use sample_mflix" \ --eval 'db.runCommand({"listSearchIndexes": "movies"});'
5

インデックスの作成が成功すると、そのインデックスを使用して MongoDB Search またはベクトル検索クエリを実行できます。MongoDB Search とベクトル検索を組み合わせることもできます。MongoDB Search クエリの実行について詳しくは、クエリの定義を参照してください。ベクトル検索クエリの詳細については、ベクトル検索 近似最近傍探索および厳密最近傍探索クエリの実行を参照してください。

次のスクリプトは、集計パイプラインクエリ条件を定義し、kubectl exec コマンドを使用して mongosh をロード してクエリを実行します。

次のクエリは、plotフィールドで baseball というタームを含む映画のプロットを検索します。comedy ジャンルと romance ジャンルの映画は除外されます。

mdb_script=$(cat <<'EOF'use sample_mflix;db.movies.aggregate([ { $search: { "compound": { "must": [ { "text": { "query": "baseball", "path": "plot" } }], "mustNot": [ { "text": { "query": ["Comedy", "Romance"], "path": "genres" } } ] }, "sort": { "released": -1 } } }, { $limit: 3 }, { $project: { "_id": 0, "title": 1, "plot": 1, "genres": 1, "released": 1 } }]);EOF) kubectl exec --context "${K8S_CTX}" -n "${MDB_NS}" \ mongodb-tools-pod -- /bin/bash -eu -c "$(cat <<EOFecho '${mdb_script}' > /tmp/mdb_script.jsmongosh --quiet "${MDB_CONNECTION_STRING}" < /tmp/mdb_script.jsEOF)"
mdbc-rs [primary] test> switched to db sample_mflixmdbc-rs [primary] sample_mflix> ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... [ { plot: 'A sports agent stages an unconventional recruitment strategy to get talented Indian cricket players to play Major League Baseball.', genres: [ 'Biography', 'Drama', 'Sport' ], title: 'Million Dollar Arm', released: ISODate('2014-05-16T00:00:00.000Z') }, { plot: 'A Taiwanese high school baseball team travels to Japan in 1931 to compete in a national tournament.', genres: [ 'Biography', 'Drama', 'History' ], title: 'Kano', released: ISODate('2014-02-27T00:00:00.000Z') }, { plot: "12-year-old Josh is a mixed race boy and a promising baseball player. He is abused by his mother's boyfriend Byrd, and neglected by his mother Debbie. He forges his own path in life when ...", genres: [ 'Drama' ], title: 'Calloused Hands', released: ISODate('2013-03-03T00:00:00.000Z') }]mdbc-rs [primary] sample_mflix>

インデックスの作成と検索クエリの実行中の詳細については、以下を参照してください。

このページを評価