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

MongoDB 検索する と MongoDB ベクトル検索インデックス

このガイドでは、MongoDB Search およびMongoDB ベクトル検索インデックスを作成および学ぶことができます。これらのインデックスを使用すると、次の機能を使用できます。

MongoDB 検索およびMongoDB ベクトル検索インデックスは、インデックスを作成するフィールドを指定し、これらのフィールドにインデックスを作成する方法を指定し、その他の任意の構成を設定します。

注意

MongoDB Search 検索インデックス マネジメントのメソッドは非同期で実行されます。ドライバー メソッドは、サーバー上で目的のアクションが完了する前に結果を返すことができます。

このガイドでは、次のアクションを実行してMongoDB 検索するおよびMongoDB ベクトル検索インデックスを管理する方法について説明します。

注意

サンプル データ

このガイドの例では、Atlasサンプルデータセットの 1 つである sample_mflixデータベース内の embedded_moviesコレクションを使用します。Atlasサンプルデータのインポート手順については、Atlas ドキュメントのサンプル データのロードを参照してください。

次のセクションでは、 MongoDB Search およびMongoDB Vector Searchインデックスのインデックスモデルを作成する方法について説明します。

MongoDB Searchインデックスを作成するには、インデックス仕様を設定する CreateSearchIndexModelインスタンスを構築する必要があります。

CreateSearchIndexModelクラスには次のプロパティがあります。

プロパティ
タイプ
説明

Definition

BsonDocument

インデックスの定義を指定します。この設定を省略すると、ドライバーは動的マッピングを含むMongoDB 検索インデックスを作成します。

Name

string

インデックス名を設定します。この設定を省略すると、ドライバーは名前を default に設定します。

Type

SearchIndexType

インデックスのタイプを設定します。この設定を省略すると、ドライバーはデフォルトでMongoDB検索インデックスを作成します。

次の例では、CreateSearchIndexModelインスタンスを作成して、search_idx という名前のインデックスの仕様を提供します。コードでは、title フィールドと released フィールドの静的マッピングを指定します。

var def = new BsonDocument {
{ "mappings", new BsonDocument {
{ "dynamic", false },
{ "fields", new BsonDocument {
{ "title", new BsonDocument { {"type", "string" } } },
{ "released", new BsonDocument { { "type", "date" } } } } }
} }
};
var indexModel = new CreateSearchIndexModel(
"search_idx",
SearchIndexType.Search,
def
);

MongoDB 検索するフィールドマッピングの詳細については、Atlas ドキュメントのフィールドマッピングの定義を参照してください。

MongoDB ベクトル検索インデックスを作成するには、インデックス仕様を設定する CreateVectorSearchIndexModelインスタンスを構築する必要があります。

CreateVectorSearchIndexModelクラスはCreateSearchIndexModelクラスから継承し、次の追加プロパティがあります。

プロパティ
タイプ
説明

Field

FieldDefinition<TDocument>

インデックスへのベクトル を含むフィールドを指定します。

Similarity

VectorSimilarity

上位 K 近傍の検索に使用するベクトル類似度関数を設定します。

Dimensions

int

インデックス作成時とクエリ時に検索が強制する次元数を指定します。

FilterFields

IReadOnlyList<FieldDefinition<TDocument>>

検索がベクトルクエリのフィルターとして使用するフィールドを指定します。

Quantization

VectorQuantization?

検索ベクトルの自動ベクトル量子化のタイプを指定します。このプロパティを設定しない場合、検索は自動定量化を使用しません。

HnswMaxEdges

int?

Hierarchical Navigable Small Worldsグラフでノードが持つことができるエッジの最大数を設定します。

HnswNumEdgeCandidates

int?

新しいノードに接続する最近傍を見つけるために評価するノードの最大数を設定します。

IncludedStoredFields

IReadOnlyList<FieldDefinition<TDocument>>

インデックスに保存するフィールドを指定します。クエリ オプションで ReturnStoredSource を true に設定すると、 MongoDB ベクトル検索これらのフィールドのみが返されます。IncludedStoredFields と ExcludedStoredFields の両方を設定することはできません。

ExcludedStoredFields

IReadOnlyList<FieldDefinition<TDocument>>

インデックスに保存される除外フィールドを指定します。MongoDB Vector Search は他のすべてのフィールドを保存します。クエリ オプションで ReturnStoredSource を true に設定すると、 MongoDB Vector Search は保存されているフィールドを返します。IncludedStoredFields と ExcludedStoredFields の両方を設定することはできません。

次の例では、CreateVectorSearchIndexModelインスタンスを作成して、vs_idx という名前のインデックスの仕様を提供します。コードでは埋め込みパスを PlotEmbedding として指定します。これはMongoDBの plot_embeddingフィールドに対応するクラスプロパティ。また、1536 次元もインデックス化し、Euclideanベクトル類似度関数を使用します。

var model = new CreateVectorSearchIndexModel<Movie> (
model => model.PlotEmbedding,
"vs_idx",
VectorSimilarity.Euclidean,
1536);

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

CreateAutoEmbeddingVectorSearchIndexModelインデックスモデルを使用して、テキストフィールドのベクトル埋め込みを自動的に生成するMongoDB ベクトル検索インデックスを作成できます。

CreateAutoEmbeddingVectorSearchIndexModel には次のプロパティがあります。

プロパティ
タイプ
説明

AutoEmbeddingModelName

string

ベクトル埋め込みの生成に使用する埋め込みモデルの名前を指定します。サポートされているモデルのリストについては、VyageAI ドキュメントのテキスト埋め込みを参照してください。

Modality

VectorEmbeddingModality

埋め込むデータの種類を指定します。現在、サポートされているモーダルは VectorEmbeddingModality.Text のみです。

Similarity

VectorSimilarity?

上位 K 近傍を検索するようにベクトル類似度関数を設定します。このプロパティを設定しない場合、デフォルトはQuantization に依存します。Quantization が None または Scalar の場合は DotProduct、Quantization が Binary または BinaryNoRescore の場合は Euclidean に依存します。

Dimensions

int

埋め込みモデルの出力次元の数を指定します。このプロパティを設定しない場合、ドライバーは埋め込みモデルのデフォルトの次元を使用します。

Quantization

VectorQuantization?

検索ベクトルの自動ベクトル量子化のタイプを指定します。このプロパティを設定しない場合、検索は自動定量化を使用しません。

HnswMaxEdges

int?

Hierarchical Navigable Small Worldsグラフでノードが持つことができるエッジの最大数を設定します。デフォルト値は 16 です。

HnswNumEdgeCandidates

int?

新しいノードに接続する最近傍を見つけるときに評価するノードの最大数を設定します。デフォルト値は 100 です。

次の例では、auto_embedded_index という名前のインデックスの仕様を提供する CreateAutoEmbeddingVectorSearchIndexModelインスタンスを作成します。このインデックスは、"voyage-4" 埋め込みモデルを使用して plotフィールドのベクトル埋め込みを自動的に生成し、runtime フィールドと year フィールドの任意のフィルターも含みます。

var model = new CreateAutoEmbeddingVectorSearchIndexModel<EmbeddedMovie>(
m => m.Plot,
"auto_embedding_index",
"voyage-4",
m => m.Runtime, m => m.Year // Optional filter fields
);

コレクションにMongoDB Search またはMongoDB ベクトル検索インデックスを作成するには、IMongoCollectionインスタンスで SearchIndexes.CreateOne() メソッドを呼び出します。このメソッドは、CreateSearchIndexModel または CreateVectorSearchIndexModelインスタンスで指定されたインデックスモデルをパラメータとして受け入れます。

次の例では、embedded_moviesコレクションにMongoDB検索インデックスを作成しています。このコードでは、インデックス名を設定し、動的マッピングを可能にする CreateSearchIndexModel が作成されます。次に、コードは CreateSearchIndexModelインスタンスを SearchIndexes.CreateOne() メソッドに渡してMongoDB 検索インデックスを作成します。

var indexModel = new CreateSearchIndexModel(
"example_index",
SearchIndexType.Search,
new BsonDocument {
{ "mappings", new BsonDocument {
{ "dynamic", true },
} }
}
);
var result = movieCollection.SearchIndexes.CreateOne(indexModel);
Console.WriteLine("Created MongoDB Search index:\n{0}", result);

IMongoCollectionインスタンスで SearchIndexes.CreateMany() メソッドを呼び出すと、複数のMongoDB Search とMongoDB ベクトル検索インデックスを作成できます。このメソッドは、CreateSearchIndexModel または CreateVectorSearchIndexModel インスタンスの IEnumerable をパラメータとして受け入れます。

この例では、次のアクションを実行します。

  1. as_idx という名前のMongoDB 検索インデックスを指定する CreateSearchIndexModelインスタンスを作成します

  2. vs_idx という名前のMongoDB ベクトル検索インデックスを指定する CreateVectorSearchIndexModelインスタンスを作成します

  3. CreateSearchIndexModel インスタンスと CreateVectorSearchIndexModel インスタンスの List を SearchIndexes.CreateMany() メソッドに渡します

  4. embedded_moviesコレクションにMongoDB Search 検索インデックスとMongoDB ベクトル検索インデックスを作成します

var searchModel = new CreateSearchIndexModel(
"as_idx",
SearchIndexType.Search,
new BsonDocument {
{ "mappings", new BsonDocument {
{ "dynamic", true },
} }
}
);
var vectorModel = new CreateVectorSearchIndexModel<Movie>(
m => m.PlotEmbedding,
"vs_idx",
VectorSimilarity.Euclidean,
1536);
var models = new List<CreateSearchIndexModel> { searchModel, vectorModel };
var indexes = movieCollection.SearchIndexes.CreateMany(models);
Console.WriteLine("Created Search indexes:\n{0} {1}", indexes.ToArray());

コレクションで SearchIndexes.List() メソッドを呼び出すと、コレクションの既存のMongoDB Search 検索インデックスおよびMongoDB ベクトル検索インデックスに関する情報にアクセスできます。

The following example accesses information about the MongoDB Search and MongoDB Vector Search indexes created in the Create Multiple Search Indexes section of this page. The code calls the SearchIndexes.List() method and prints a list of the MongoDB Search and MongoDB Vector Search indexes on the collection:

var indexesList = movieCollection.SearchIndexes.List().ToList();
foreach (var i in indexesList)
{
Console.WriteLine(i);
}

MongoDB Search または MongoDB ベクトル検索インデックスを更新するには、IMongoCollectionインスタンスで SearchIndexes.Update() メソッドを呼び出します。このメソッドは次のパラメーターを受け入れます:

  • 更新するインデックスの名前

  • 変更されたインデックス定義ドキュメント

The following example updates the Vector Search index named vs_index created in the Create Multiple Search Indexes section of this page. The code creates a new index definition document that instructs the index to use "dotProduct" as the vector similarity function. Then, the code calls the SearchIndexes.Update() method to update the index:

var updatedDef = new BsonDocument
{
{ "fields", new BsonArray
{
new BsonDocument
{
{ "type", "vector" },
{ "path", "plot_embedding" },
{ "numDimensions", 1536 },
{ "similarity", "dotProduct" }
}
}
}
};
movieCollection.SearchIndexes.Update("vs_index", updatedDef);

MongoDB Search または MongoDB ベクトル検索インデックスを削除するには、IMongoCollection インスタンスで SearchIndexes.DropOne() メソッドを呼び出します。このメソッドは、削除するインデックスの名前をパラメータとして受け入れます。

The following example deletes the MongoDB Search index named example_index created in the Create a Search Index section of this page. The code passes the index name to the SearchIndexes.DropOne() method to delete the index:

movieCollection.SearchIndexes.DropOne("example_index");

.NET/ C#ドライバーを使用して作成できるその他のインデックスの詳細については、インデックスの作成と管理ガイドを参照してください。

MongoDB Search の詳細については、次の Atlas ドキュメントを参照してください。

MongoDB ベクトル検索の詳細については、次の Atlas ドキュメントを参照してください。

このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。