検索インデックスを作成します
項目一覧
定義
バージョン 7.0 の新機能: (6.0.7 以降でも利用可能)
指定されたコレクションに 1 つ以上の Atlas Search インデックスまたはVector Search インデックスを作成します。
mongosh
メソッド db.collection.createSearchIndex()
はcreateSearchIndexes
データベースコマンドを囲むラッパーを提供します。
重要
このコマンドは、 MongoDB Atlas でホストされている配置でのみ実行でき、 サーバーレスインスタンス で はサポートされていません 。
構文
コマンド構文:
db.runCommand( { createSearchIndexes: "<collection name>", indexes: [ { name: "<index name>", type: "<search index type>", definition: { /* search index definition fields */ } }, ... ] } )
コマンドフィールド
createSearchIndexes
コマンドは、次のフィールドがあります。
フィールド | タイプ | 必要性 | 説明 |
---|---|---|---|
createSearchIndexes | string | 必須 | 検索インデックスを作成するコレクションの名前。 |
indexes | 配列 | 必須 | 作成するインデックスを説明するドキュメントの配列。 |
indexes.name | string | 任意 | 作成する検索インデックスの名前。 単一のコレクションに同じ名前で複数のインデックスを作成することはできません。
|
indexes.type | string | 任意 | Type of search index to create. 次のいずれかを指定できます。
|
indexes.definition | ドキュメント | 必須 | 作成するインデックスを説明するドキュメント。 |
検索インデックス定義構文
検索インデックスの定義には、次のフィールドがあります。
{ analyzer: "<analyzer-for-index>", searchAnalyzer: "<analyzer-for-query>", mappings: { dynamic: <boolean>, fields: { <field-definition> } }, analyzers: [ <custom-analyzer> ], storedSource: <boolean> | { <stored-source-definition> }, synonyms: [ { name: "<synonym-mapping-name>", source: { collection: "<source-collection-name>" }, analyzer: "<synonym-mapping-analyzer>" } ] }
フィールド | タイプ | 必要性 | 説明 |
---|---|---|---|
analyzer | string | 任意 | インデックス作成時に string フィールドに適用するアナライザを指定します。 このフィールドを省略すると、インデックスは標準 アナライザを使用します。 |
searchAnalyzer | string | 任意 | テキストが検索される前にクエリ テキストに適用するアナライザを指定します。 このフィールドを省略すると、インデックスは
|
mappings | オブジェクト | 必須 | このインデックスの異なるパスにあるフィールドのインデックス方法を指定します。 |
mappings.dynamic | ブール値 | 任意 | このインデックスの 動的フィールドマッピング を有効または無効にします。
省略した場合、デフォルトは |
mappings.fields | ドキュメント | 条件付き | 動的マッピングが無効になっている場合にのみ必要です。 インデックスを作成するフィールドを指定します。 詳しくは「フィールドマッピングの定義 」を参照してください。 |
analyzers | 配列 | 任意 | このインデックスで使用するカスタム アナライザを指定します。 |
storedSource | ブール値または保存されたソース定義 | 任意 | |
synonyms | 任意 | インデックスで使用する シノニム マッピング を指定します。 シノニム(同意語) を設定すると、同じ意味または似た意味を持つ単語をインデックスして検索できます。 |
ベクトル検索インデックスの定義構文
ベクトル検索のインデックス定義には次のフィールドが含まれます。
{ "fields": [ { "type": "vector" | "filter", "path": "<field-to-index>", "numDimensions": <number-of-dimensions>, "similarity": "euclidean" | "cosine" | "dotProduct" } ] }
ベクトル検索のインデックス定義フィールドの説明については、「 ベクトル検索のフィールドにインデックスを作成する方法 」を参照してください。
動作
createSearchIndexes
コマンドはインデックスビルドをトリガーします。 コマンドからの応答を受け取ってから、インデックスが準備完了するまでの間に遅延が発生する可能性があります。
検索インデックスのステータスを確認するには、 $listSearchIndexes
集計ステージを使用します。
アクセス制御
配置でアクセス制御が強制される場合、 createSearchIndexes
コマンドを実行するユーザーは、データベースまたはコレクションに対するcreateSearchIndexes
特権アクションを持っている必要があります。
{ resource: { db : <database>, collection: <collection> }, actions: [ "createSearchIndexes" ] }
組み込みのreadWrite
ロールにはcreateSearchIndexes
特権が付与されます。 次の例では、 products
データベースでaccountUser01
にreadWrite
ロールを付与しています。
db.grantRolesToUser( "accountUser01", [ { role: "readWrite", db: "products" } ] )
出力
createSearchIndexes
コマンドの出力は次のようになります。
{ ok: 1, indexesCreated: [ { id: "<index Id>", name: "<index name>" } ] }
重要
応答フィールドok: 1
は、コマンドが成功したことを示します。 ただし、応答を受け取ってから作成されたインデックスが使用可能になるまでの間にタイムラグが生じる可能性があります。
検索インデックスのステータスを確認するには、 $listSearchIndexes
集計ステージを使用します。
例
すべてのフィールドに検索インデックスを作成する
次の例では、 contacts
コレクションにsearchIndex01
という名前の検索インデックスを作成します。
db.runCommand( { createSearchIndexes: "contacts", indexes: [ { name: "searchIndex01", definition: { mappings: { dynamic: true } } } ] } )
インデックス定義でmappings: { dynamic: true }
が指定されています。つまり、インデックスには コレクション内のデータ型をサポートしているすべてのフィールドが含まれています。
言語アナライザによる検索インデックスの作成
言語アナライザは、インデックスを作成するのに十分な重要ではない単語であるストップワードを導入します。
次の例では、 cars
コレクションにfrenchIndex01
という名前の検索インデックスを作成し、 fr
フィールドにlucene.french
アナライザを指定します。
db.runCommand( { createSearchIndexes: "cars", indexes: [ { name: "frenchIndex01", definition: { mappings: { fields: { subject: { fields: { fr: { analyzer: "lucene.french", type: "string" } }, type: "document" } } } } } ] } )
言語アナライザの詳細については、「言語アナライザ 」を参照してください。
複数の検索インデックスの作成
次のコマンドは、 products
コレクションに 2 つの検索インデックス( searchIndex02
とsearchIndex03
を作成します。
db.runCommand( { createSearchIndexes: "products", indexes: [ { name: "searchIndex02", definition: { mappings: { fields: { title: { type: "string", analyzer: "lucene.simple" } } } } }, { name: "searchIndex03", definition: { mappings: { dynamic: true } } } ] } )
searchIndex02
は、 title
フィールドで単純なアナライザを使用します。 単純なアナライザは、空白、句読点、数字など、文字以外の文字に基づいてテキストを検索可能なタームに分割します。
searchIndex03
は 動的フィールドマッピング を使用するため、インデックスにはコレクション内のデータ型をサポートしたすべてのフィールドが含まれています。
ベクトル検索インデックスの作成
次の例では、 movies
コレクションにvectorSearchIndex01
という名前のベクトル検索インデックスを作成します。
db.runCommand( { createSearchIndexes: "movies", indexes: [ { name: "vectorSearchIndex01", type: "vectorSearch", definition: { fields: [ { type: "vector", numDimensions: 1, path: "genre", similarity: "cosine" } ] } } ] } )
ベクトル検索インデックスには 1 つの次元が含まれており、 genre
フィールドにインデックスが作成されます。