Docs Menu
Docs Home
/ / /
Rust ドライバー
/ /

Atlas Search と Vector Search インデックス

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

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

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

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

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

注意

サンプル データ

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

Atlas Search インデックスを作成するには、まずインデックス仕様を設定するSearchIndexModelインスタンスを構築する必要があります。 SearchIndexModelインスタンスの構築を開始するには、 SearchIndexModel::builder()メソッドを呼び出します。

注意

インスタンス化モデル

Rust ドライバーは、 SearchIndexModelを含む一部の構造体型を作成するためのビルダ設計パターンを実装します。 builder()メソッドを使用して、オプション ビルダー メソッドを連鎖させることで、各タイプのインスタンスを構築できます。

Rust ドライバーは、次のSearchIndexModelビルダ メソッドを提供します。

ビルダーメソッド
Parameter Type
説明

definition()

Document

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

name()

String

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

index_type()

SearchIndexType

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

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

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

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

let def = doc! { "mappings": doc! {
"dynamic": false,
"fields": {
"title": {"type": "string"},
"released": {"type": "date"}
}
}};
let idx_model = SearchIndexModel::builder()
.definition(def)
.name("search_idx".to_string())
.index_type(SearchIndexType::Search)
.build();

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

let def = doc! {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean",
}]
};
let idx_model = SearchIndexModel::builder()
.definition(def)
.name("vs_idx".to_string())
.index_type(SearchIndexType::VectorSearch)
.build();

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

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

let idx_model = SearchIndexModel::builder()
.definition(doc! { "mappings": doc! {"dynamic": true} })
.name("example_index".to_string())
.build();
let result = my_coll.create_search_index(idx_model).await?;
println!("Created Atlas Search index:\n{}", result);
Created Atlas Search index:
"example_index"

Collection インスタンスで create_search_indexes() メソッドを呼び出すことで、複数の Atlas Search およびベクトル検索インデックスを作成することができます。このメソッドは、SearchIndexModel インスタンスのベクトルをパラメーターとして受け入れます。

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

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

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

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

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

let as_idx = SearchIndexModel::builder()
.definition(doc! { "mappings": doc! {"dynamic": true} })
.name("as_idx".to_string())
.build();
let vs_idx = SearchIndexModel::builder()
.definition(doc! {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean",
}]
})
.name("vs_idx".to_string())
.index_type(SearchIndexType::VectorSearch)
.build();
let models = vec![as_idx, vs_idx];
let result = my_coll.create_search_indexes(models).await?;
println!("Created indexes:\n{:?}", result);
Created Atlas Search indexes:
["as_idx", "vs_idx"]

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

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

let mut cursor = my_coll.list_search_indexes().await?;
while let Some(index) = cursor.try_next().await? {
println!("{}\n", index);
}
{ "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": [...] }

Tip

カーソルの反復処理の詳細については、「 カーソルを使用したデータへのアクセス」ガイドを参照してください。

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

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

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

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

let name = "vs_index";
let updated_def = doc! {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "dotProduct",
}]
};
my_coll.update_search_index(name, updated_def).await?;

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

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

let name = "example_index";
my_coll.drop_search_index(name).await?;

Rust ドライバーを使用して作成できるその他のインデックスの詳細については、「インデックスのガイド 」を参照してください。

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

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

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

戻る

Indexes

項目一覧