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

Atlas Search インデックス

このガイドでは、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 ドキュメントを参照してください。

戻る

Multikey

項目一覧