Docs Menu
Docs Home
/ / /
C#/.NET ドライバー
/

Atlas Search と Vector Search インデックス

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

  • Atlas Search : 高速で全文検索を実行

  • Atlas ベクトル検索 :ベクトル埋め込みでセマンティック(類似性)検索を実行

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

注意

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

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

  • 検索インデックスモデルの作成

  • 検索インデックスを作成

  • 複数の検索インデックスの作成

  • 検索インデックスをリストする

  • 検索インデックスをアップデートする

  • 検索インデックスを削除する

注意

サンプル データ

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

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

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

プロパティ
タイプ
説明

definition

BsonDocument

インデックス定義を指定します。この設定を省略すると、ドライバーは動的マッピングを使用して Atlas Search インデックスを作成します。

name

string

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

type

SearchIndexType

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

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

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

次の例では、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
);

次の例では、vs_idx という名前のインデックスの仕様を提供するための CreateSearchIndexModel インスタンスを作成します。コードは、埋め込みパスを plot_embedding に指定し、1536 次元にインデックスを付け、"euclidean" ベクトル類似度関数を使用します。

var def = new BsonDocument
{
{ "fields", new BsonArray
{
new BsonDocument
{
{ "type", "vector" },
{ "path", "plot_embedding" },
{ "numDimensions", 1536 },
{ "similarity", "euclidean" }
}
}
}
};
var indexModel = new CreateSearchIndexModel(
"vs_idx",
SearchIndexType.VectorSearch,
def
);

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

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

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

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

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

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

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

  3. 両方の CreateSearchIndexModel インスタンスの ListSearchIndexes.CreateMany() メソッドに渡します

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

var searchModel = new CreateSearchIndexModel(
"as_idx",
SearchIndexType.Search,
new BsonDocument {
{ "mappings", new BsonDocument {
{ "dynamic", true },
} }
}
);
var vectorModel = new CreateSearchIndexModel(
"vs_idx",
SearchIndexType.VectorSearch,
new BsonDocument
{
{ "fields", new BsonArray
{
new BsonDocument
{
{ "type", "vector" },
{ "path", "plot_embedding" },
{ "numDimensions", 1536 },
{ "similarity", "euclidean" }
}
}
}
}
);
var models = new List<CreateSearchIndexModel> { searchModel, vectorModel };
var indexes = movieCollection.SearchIndexes.CreateMany(models);
Console.WriteLine("Created Search indexes:\n{0} {1}", indexes.ToArray());
Created Search indexes:
as_idx vs_idx

コレクションの既存の Atlas Search 検索インデックスと Vector Search 検索インデックスに関する情報にアクセスするには、コレクションで SearchIndexes.List() メソッドを呼び出します。

次の例では、このページの「複数の検索インデックスの作成」セクションで作成された Atlas Search および Vector Search インデックスに関する情報にアクセスします。このコードは SearchIndexes.List() メソッドを呼び出し、コレクション上の Atlas Search 検索インデックスと Vector Search 検索インデックスのリストを出力します。

var indexesList = movieCollection.SearchIndexes.List().ToList();
foreach (var i in indexesList)
{
Console.WriteLine(i);
}
{ "id": "...", "name": "as_idx", "status": "READY", "queryable":
true, "latestDefinitionVersion": {...}, "latestDefinition": {
"mappings": { "dynamic": true } }, "statusDetail": [...] }
{ "id": "...", "name": "vs_idx", "type": "vectorSearch", "status":
"READY", "queryable": true, ..., "latestDefinition": { "fields": [{
"type": "vector", "path": "plot_embedding", "numDimensions": 1536,
"similarity": "euclidean" }] }, "statusDetail": [...] }

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

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

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

以下の例は、このページの「複数のベクトル検索インデックスの作成」セクションで作成されたvs_index という名前の Vector Search インデックスを更新します。このコードは、インデックスに "dotProduct" をベクトル類似度関数として使用するよう指示する新しいインデックス定義ドキュメントを作成します。次に、このコードは SearchIndexes.Update() メソッドを呼び出してインデックスを更新します。

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

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

次の例では、このページの「検索インデックスの作成」セクションで作成されたexample_indexという名前のAtlas Search インデックスを削除します。 このコードはインデックス名をSearchIndexes.DropOne()メソッドに渡してインデックスを削除します。

movieCollection.SearchIndexes.DropOne("example_index");

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

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

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

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

戻る

Indexes

項目一覧