Overview
このガイドでは、Ruby ドライバーを使用して、Atlas Search および Atlas Vector Search インデックスをプログラムで管理する方法を学習できます。
Atlas Search 機能を使うと、MongoDB Atlas でホストされているコレクションを全文検索できます。Atlas Search の詳細については、「 Atlas Search の概要」を参照してください。
Atlas Vector Search を使用すると、MongoDB Atlas に保存されているベクトル埋め込みに対してセマンティック検索を実行できます。Atlas Vector Search の詳細については、「Atlas Vector Search の概要」を参照してください。
次のメソッドを呼び出して、Atlas Search インデックスを管理できます。
search_indexes#create_one
search_indexes#create_many
search_indexes#update_one
search_indexes#drop_one
注意
Atlas Search と Atlas Vector Search インデックス マネジメントは非同期です。
Ruby ドライバーは Atlas Search のインデックスと Vector Search のインデックスを非同期に管理します。次のセクションで説明するメソッドは、サーバーの応答をすぐに返しますが、検索インデックスの変更はバックグラウンドで行われ、完了までにしばらく時間がかかることがあります。
次のセクションでは、前述の各コマンドの使用方法を示すコード例を示します。
検索インデックスを作成
Atlas Search または Vector Search のインデックスを 1 つ作成するには、search_indexes#create_one
メソッドを使用します。複数のインデックスを作成するには、search_indexes#create_many
メソッドを使用します。どちらのメソッドも即座に返されますが、インデックスはバックグラウンドで非同期的に作成されます。
次のコード例は、インデックスの定義とインデックスに対する任意の名前を指定して、Atlas Search インデックスを作成する方法を示しています。
# Creates indexes on all dynamically indexable fields with a default index name collection.search_indexes.create_one( { mappings: { dynamic: true } } ) # Creates an index on the specified field with the specified index name index_definition = { mappings: { dynamic: false, fields: { fullplot: { type: 'string' } } } } collection.search_indexes.create_one(index_definition, name: 'mySearchIndex')
注意
デフォルトでは、type
パラメーターを渡さない場合、ドライバーは Atlas Search インデックスを作成します。ベクトル検索インデックスを作成するには、create_one
を呼び出す際に type
パラメーターを 'vectorSearch'
に設定しなければなりません。
search_indexes#create_many
を使用して、インデックス仕様の配列を提供することで、複数の Atlas Search または Vector Search のインデックスを作成できます。各インデックス仕様には、次のコンポーネントを含める必要があります。
definition
パラメータ: インデックスを定義name
パラメータ: インデックス名を指定type
パラメーター:インデックスの種類('search'
または'vectorSearch'
)を指定します
次のコード例は、1 回の呼び出しで Atlas Search インデックスと Vector Search インデックスを作成する方法を示しています。
index_spec_1 = { name: 'searchIndex_plot', type: 'search', definition: { mappings: { dynamic: false, fields: { plot: { type: 'string' } } } } } index_spec_2 = { name: 'vsIndex_plot_embedding', type: 'vectorSearch', definition: { fields: [ { type: "vector", path: "plot_embedding", numDimensions: 1536, similarity: "dotProduct" } ] } } collection.search_indexes.create_many([index_spec_1, index_spec_2])
より長いインデックス定義の場合、メソッド呼び出しの外部でインデックスを定義すると便利です。インデックス定義の構文の詳細については、Atlas マニュアルの Atlas Search インデックス構文の確認ガイドを参照してください。
検索インデックスをアップデートする
Atlas Search または Vector Search インデックスを更新するには、search_indexes#update_one
メソッドを使用します。
インデックスを更新するには、新しいインデックス定義を提供する必要があります。更新するインデックスは、インデックスの name
または id
を使用して指定する必要があります。次のコードは、Atlas Search インデックスを更新する方法を示しています。
updated_definition = { mappings: { dynamic: false, fields: { fullplot: { type: 'string' } } } } # Specifies the index to update by using the index name collection.search_indexes.update_one(updated_definition, name: 'searchIndex_plot') # Specifies the index to update by using the index id collection.search_indexes.update_one(updated_definition, id: <index id>)
検索インデックスを削除する
Atlas Search または Vector Search インデックスを削除するには、search_indexes#drop_one
メソッドを使用します。
インデックスを削除するには、インデックスの id
または name
を指定する必要があります。次のコードは、コレクションから検索インデックスを削除する方法を示しています。
# Specifies the index to delete by using the index name collection.search_indexes.drop_one(name: 'searchIndex_plot') # Specifies the index to delete by using the index id collection.search_indexes.drop_one(id: <index id>)
検索インデックスをリストする
search_indexes
オブジェクトを使用して、コレクション内の各 Atlas Search および Vector Search インデックスの全体的なインデックス仕様を一覧表示できます。
puts collection.search_indexes.collect(&:to_json)
各インデックスのインデックス仕様における個々のフィールドを一覧表示するには、search_indexes
オブジェクトを反復処理します。
collection.search_indexes.each do |index_spec| p index_spec['id'] p index_spec['name'] p index_spec['status'] p index_spec['queryable'] p index_spec['latestDefinition'] end
詳細情報
MongoDB Atlas Search の詳細については、Atlas Search ドキュメントを参照してください。
API ドキュメント
このガイドで説明されているメソッドの詳細については、次の API ドキュメントを参照してください。