db.collection.createSearchIndex()
項目一覧
定義
バージョン 7.0 の新機能: (6.0.7 以降でも利用可能)
指定されたコレクションに Atlas Search インデックスまたはVector Search インデックスを作成します。
重要
mongosh メソッド
このページでは、mongosh
メソッドについて記載しています。ただし、データベースコマンドや Node.js などの言語固有のドライバーのドキュメントには該当しません。
データベースコマンドについては、 createSearchIndexes
コマンドを参照してください。
MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
This command is not supported in M0, M2, and M5 clusters or in serverless instances. 詳細については、「サポートされていないコマンド 」を参照してください。
構文
コマンド構文:
db.<collection>.createSearchIndex( <name>, <type>, { <definition> } )
コマンドフィールド
createSearchIndex()
次のフィールドを取ります。
フィールド | タイプ | 必要性 | 説明 |
---|---|---|---|
name | string | 任意 | 作成する検索インデックスの名前。 単一のコレクションに同じ名前で複数のインデックスを作成することはできません。
|
type | string | 任意 | Type of search index to create. 次のいずれかを指定できます。
|
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" } ] }
ベクトル検索のインデックス定義フィールドの説明については、「 ベクトル検索のフィールドにインデックスを作成する方法 」を参照してください。
動作
createSearchIndex()
インデックスの構築をトリガーします。 コマンドからの応答を受け取ってから、インデックスが準備完了するまでの間に遅延が発生する可能性があります。
検索インデックスのステータスを確認するには、 $listSearchIndexes
集計ステージを使用します。
アクセス制御
配置でアクセス制御を適用する場合、 createSearchIndex()
を実行しているユーザーは、データベースまたはコレクションに対するcreateSearchIndexes
特権アクションを持っている必要があります。
{ resource: { db : <database>, collection: <collection> }, actions: [ "createSearchIndexes" ] }
組み込みのreadWrite
ロールにはcreateSearchIndexes
特権が付与されます。 次の例では、 products
データベースでaccountUser01
にreadWrite
ロールを付与しています。
db.grantRolesToUser( "accountUser01", [ { role: "readWrite", db: "products" } ] )
例
すべてのフィールドに検索インデックスを作成する
次の例では、 movies
コレクションにsearchIndex01
という名前の検索インデックスを作成します。
db.movies.createSearchIndex( "searchIndex01", { mappings: { dynamic: true } } )
インデックス定義でmappings: { dynamic: true }
が指定されています。つまり、インデックスには コレクション内のデータ型をサポートしているすべてのフィールドが含まれています。
言語アナライザによる検索インデックスの作成
言語アナライザは、インデックスを作成するのに十分な重要ではない単語であるストップワードを導入します。
次の例では、 cars
コレクションにfrenchIndex01
という名前の検索インデックスを作成し、 fr
フィールドにlucene.french
アナライザを指定します。
db.cars.createSearchIndex( "frenchIndex01", { mappings: { fields: { subject: { fields: { fr: { analyzer: "lucene.french", type: "string" } }, type: "document" } } } } )
言語アナライザの詳細については、「言語アナライザ 」を参照してください。
デフォルト名で検索インデックスを作成
次のcreateSearchIndex()
メソッドでは、インデックス定義のみを指定し、インデックス名を省略します。 コマンドは、 food
コレクションにdefault
という名前の検索インデックスを作成します。
db.food.createSearchIndex( { mappings: { fields: { title: { type: "string" } } } } )
ベクトル検索インデックスの作成
次の例では、 movies
コレクションにvectorSearchIndex01
という名前のベクトル検索インデックスを作成します。
db.movies.createSearchIndex( "vectorSearchIndex01", "vectorSearch", { fields: [ { type: "vector", numDimensions: 1, path: "genre", similarity: "cosine" } ] } )
ベクトル検索インデックスには 1 つの次元が含まれており、 genre
フィールドにインデックスが作成されます。