Docs Menu
Docs Home
/ /

MongoDB Search インデックス

このガイドでは、 Cドライバーを使用してMongoDB Search およびMongoDB ベクトル検索インデックスをプログラムで管理する方法を学習できます。

MongoDB Search 機能を使用すると、 MongoDB Atlasでホストされているコレクションに対して全文検索を実行できます。 MongoDB Search の詳細については、Atlas ドキュメントの「 MongoDB Search の概要 」を参照してください。

MongoDB ベクトル検索 を使用すると、 MongoDB Atlasに保存されているベクトル埋め込みに対してセマンティック検索を実行できます。 MongoDB ベクトル検索の詳細については、Atlas ドキュメントの「 MongoDB ベクトル検索 の概要 」を参照してください。

次のセクションでは、 MongoDB Search およびMongoDB ベクトル検索インデックスを作成、一覧表示、更新、削除する方法を示すコード例を示します。

MongoDB Search またはMongoDB ベクトル検索インデックスを作成するには、createSearchIndexes コマンドを mongoc_collection_command_simple() 関数に渡します。このコマンドを使用して、1 つまたは複数のインデックスを作成できます。

次のコード例は、 MongoDB Searchインデックスの作成方法を示しています。

bson_t cmd;
bson_error_t error;
char *cmd_str = bson_strdup_printf (
BSON_STR ({
"createSearchIndexes" : "%s",
"indexes" : [ {"definition" : {"mappings" : {"dynamic" : false}}, "name" : "<index name>"} ]
}),
"<collection name>");
bson_init_from_json (&cmd, cmd_str, -1, &error);
bson_free (cmd_str);
if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) {
printf ("Successfully created search index\n");
} else {
fprintf (stderr, "Failed to create search index: %s", error.message);
}
bson_destroy (&cmd);

次のコード例は、 MongoDB ベクトル検索インデックスの作成方法を示しています。

bson_t cmd;
bson_error_t error;
char * cmd_str = bson_strdup_printf(
BSON_STR({
"createSearchIndexes": "%s",
"indexes": [{
"name": "<index name>",
"type": "vectorSearch",
"definition": {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean"
}]
}
}]
}),
"<collection name>"
);
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully created Vector Search index\n");
} else {
fprintf(stderr, "Failed to create Vector Search index: %s", error.message);
}
bson_destroy(&cmd);

次のコード例は、mongoc_collection_command_simple() 関数を一度呼び出すことで、両方の検索インデックスを作成する方法を示しています。

bson_t cmd;
bson_error_t error;
char * cmd_str = bson_strdup_printf(
BSON_STR({
"createSearchIndexes": "%s",
"indexes": [{
"definition": {
"mappings": {
"dynamic": false
}
},
"name": "<MongoDB Search index name>"
},
{
"name": "<Vector Search index name>",
"type": "vectorSearch",
"definition": {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean"
}]
}
}
]
}),
"<collection name>");
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully created search indexes\n");
} else {
fprintf(stderr, "Failed to create search indexes: %s", error.message);
}
bson_destroy(&cmd);

各検索インデックスを定義するために使用される構文について詳しく学ぶには、Atlas ドキュメントの次のガイドを参照してください。

$listSearchIndexes集計ステージを mongoc_collection_aggregate() 関数に渡すと、コレクション内のすべてのMongoDB Search とMongoDB ベクトル検索インデックスを返すことができます。

次のコード例は、コレクション内の検索インデックスのリストを出力する方法を示しています。

bson_t pipeline;
const bson_t *doc;
bson_error_t error;
const char *pipeline_str = BSON_STR ({"pipeline" : [ {"$listSearchIndexes" : {}} ]});
bson_init_from_json (&pipeline, pipeline_str, -1, &error);
mongoc_cursor_t *cursor =
mongoc_collection_aggregate (collection, MONGOC_QUERY_NONE, &pipeline, NULL, NULL);
while (mongoc_cursor_next (cursor, &doc)) {
char *str = bson_as_canonical_extended_json (doc, NULL);
printf ("%s\n", str);
bson_free (str);
}
bson_destroy (&pipeline);
mongoc_cursor_destroy (cursor);

updateSearchIndex コマンドを mongoc_collection_command_simple() 関数に渡して、 MongoDB Search またはMongoDB ベクトル検索インデックス を更新できます。

次のコードは、このガイドの「 検索インデックスの作成 」セクションで作成されたMongoDB Searchインデックスを更新して、 動的マッピング を使用する方法を示しています。

bson_t cmd;
bson_error_t error;
char *cmd_str = bson_strdup_printf (
BSON_STR ({
"updateSearchIndex" : "%s",
"definition" : {"mappings" : {"dynamic" : true}}, "name" : "<index name>"}),
"<collection name>");
bson_init_from_json (&cmd, cmd_str, -1, &error);
bson_free (cmd_str);
if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) {
printf ("Successfully updated search index\n");
} else {
fprintf (stderr, "Failed to create search index: %s", error.message);
}
bson_destroy (&cmd);

次のコードは、このガイドの 「検索インデックスの作成」 セクションで作成されたMongoDB ベクトル検索インデックスを更新して、cosine 類似度関数を使用する方法を示しています。

bson_t cmd;
bson_error_t error;
char * cmd_str = bson_strdup_printf(
BSON_STR({
"updateSearchIndex": "%s",
"name": "<index name>",
"definition": {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "cosine"
}]
}
}),
"<collection name>"
);
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully updated search index\n");
} else {
fprintf(stderr, "Failed to create search index: %s", error.message);
}
bson_destroy(&cmd);

MongoDB Search またはMongoDB ベクトル検索インデックスを削除するには、dropSearchIndexes コマンドを mongoc_collection_command_simple() 関数に渡します。

次のコードは、コレクションから検索インデックスを削除する方法を示しています。

bson_t cmd;
bson_error_t error;
char *cmd_str = bson_strdup_printf (
BSON_STR ({
"dropSearchIndexes" : "%s",
"index" : "<index name>"
}),
"<collection name>");
bson_init_from_json (&cmd, cmd_str, -1, &error);
if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) {
printf ("Successfully deleted search index\n");
} else {
fprintf (stderr, "Failed to delete search index: %s", error.message);
}
bson_destroy (&cmd);

MongoDB Search の詳細については、Atlas ドキュメントの「 MongoDB Search インデックス 」を参照してください。

MongoDB ベクトル検索の詳細については、Atlas ドキュメントの「 MongoDB ベクトル検索 のフィールドにインデックスを作成する方法 」を参照してください。

このガイドで説明されている関数の詳細については、次のAPIドキュメントを参照してください。

戻る

Multikey Indexes

項目一覧