Atlas Search と Vector Search インデックス
Overview
PyMongo を使用して、 Atlas Search と Atlas Vector Search のインデックスを管理できます。インデックスは、検索の動作とインデックスを作成するフィールドを指定します。
Atlas Search を使用すると、MongoDB Atlas でホストされているコレクションに対して全文検索を実行できます。 Atlas Search インデックスは、検索の動作とインデックスを作成するフィールドを指定します。
Atlas Vector Search を使用すると、MongoDB Atlas に保存されているベクトル埋め込みに対してセマンティック検索を実行できます。 ベクトル検索インデックスは、クエリ対象のベクトル埋め込みと、データを事前フィルタリングするために使用するブール値、日付、ObjectId、数値、string、または UUID 値のインデックスを定義します。
コレクションに対して次のメソッドを呼び出して、Atlas Search インデックスと Vector Search インデックスを管理できます。
create_search_index()
create_search_indexes()
list_search_indexes()
update_search_index()
drop_search_index()
注意
Atlas Search インデックス マネジメントのメソッドは非同期で実行されます。ドライバー メソッドは、正常に実行されたことを確認する前に戻ることができます。インデックスの現在のステータスを確認するには、list_search_indexes()
メソッドを呼び出します。
次のセクションでは、前述の各メソッドの使用方法を示すコード例を示します。
検索インデックスを作成
create_search_index() と create_search_indexes() メソッドを使用して、Atlas Search インデックスまたはAtlas Vector Search インデックスを作成できます。
次のコード例は、Atlas Search インデックスを1つ作成する方法を示しています。
index = { "definition": { "mappings": { "dynamic": True } }, "name": "<index name>", } collection.create_search_index(index)
次のコード例は、SearchIndexModel オブジェクトを使用して Atlas Vector Search インデックスを 1 つ作成する方法を示しています。
from pymongo.operations import SearchIndexModel search_index_model = SearchIndexModel( definition={ "fields": [ { "type": "vector", "numDimensions": <number of dimensions>, "path": "<field to index>", "similarity": "<select from euclidean, cosine, dotProduct>" } ] }, name="<index name>", type="vectorSearch", ) collection.create_search_index(model=search_index_model)
create_search_indexes() メソッドを使用して、複数のインデックスを作成できます。これらのインデックスは、Atlas Search または Atlas Vector Search インデックスになります。create_search_indexes()
メソッドは、作成したい各インデックスに対応する SearchIndexModel
オブジェクトのリストを取ります。
次のコード例は、Atlas Search インデックスと Atlas Vector Search インデックスを作成する方法を示しています。
search_idx = SearchIndexModel( definition ={ "mappings": { "dynamic": True } }, name="my_index", ) vector_idx = SearchIndexModel( definition={ "fields": [ { "type": "vector", "numDimensions": <number of dimensions>, "path": "<field to index>", "similarity": "<select from euclidean, cosine, dotProduct>" } ] }, name="my_vector_index", type="vectorSearch", ) indexes = [search_idx, vector_idx] collection.create_search_indexes(models=indexes)
検索インデックスをリストする
list_search_indexes() メソッドを使用して、コレクションの Atlas Search インデックスと Atlas Vector Search インデックスに関する情報を取得できます。
次のコード例は、コレクションの検索インデックスのリストを出力する方法を示しています。
results = list(collection.list_search_indexes()) for index in results: print(index)
検索インデックスをアップデートする
update_search_index() メソッドを使用して、Atlas Search インデックスまたは Atlas Vector Search インデックスを更新できます。
次のコード例は、Atlas Search インデックスを更新する方法を示しています。
new_index_definition = { "mappings": { "dynamic": False } } collection.update_search_index("my_index", new_index)
次のコード例は、Atlas Vector Search インデックスを更新する方法を示しています。
new_index_definition = { "fields": [ { "type": "vector", "numDimensions": 1536, "path": "<field to index>", "similarity": "euclidean" }, ] } collection.update_search_index("my_vector_index", new_index_definition)
検索インデックスを削除する
drop_search_index() メソッドを使用して、Atlas Search インデックスまたは Atlas Vector Search インデックスを削除できます。
次のコードは、コレクションから検索インデックスを削除する方法を示しています。
collection.drop_index("my_index")