定義
バージョン 7.0 の新機能 (6.0.7 以降でも利用可能)
Updates an existing MongoDB Search index.
mongoshメソッドdb.collection.updateSearchIndex()はupdateSearchIndexデータベースコマンドを囲むラッパーを提供します。
注意
MongoDB Atlasに加えて、このコマンドは次の自己管理型配置で使用できます。
MongoDB Enterprise 配置を実行中バージョン 8.2 以降の Kubernetes Operator
MongoDB Community 配置 バージョン 8.2 以降を実行中
構文
コマンド構文:
db.runCommand( { updateSearchIndex: "<collection name>", id: "<index Id>", name: "<index name>", type: "search | vectorSearch", definition: { /* search index definition fields */ } } )
コマンドフィールド
updateSearchIndex コマンドは、次のフィールドがあります。
フィールド | タイプ | 必要性 | 説明 |
|---|---|---|---|
| string | 必須 | 更新するインデックスを含むコレクションの名前。 |
| string | 条件付き |
フィールドまたは |
| string | 条件付き | 更新するインデックスの名前。 フィールドまたは |
| string | 任意 | インデックスのタイプ 。値は次のオプションのいずれかである必要があります。
指定する値は、更新するインデックスのタイプと一致する必要があります。インデックスの種類は変更できません。 このフィールドは、Atlas クラスター内のコレクションのインデックスの更新ではサポートされていません。 |
| ドキュメント | 必須 | 更新された検索インデックスの定義を説明するドキュメント。 指定された定義は、検索インデックス内の以前の定義を置き換えます。
|
検索インデックス定義構文
検索インデックスの定義には、次のフィールドがあります。
{ 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>" } ] }
フィールド | タイプ | 必要性 | 説明 |
|---|---|---|---|
| string | 任意 | |
| string | 任意 | テキストが検索される前にクエリ テキストに適用するアナライザを指定します。 このフィールドを省略すると、インデックスは
|
| オブジェクト | 必須 | このインデックスの異なるパスにあるフィールドのインデックス方法を指定します。 |
| ブール値 | 任意 | このインデックスの 動的フィールドマッピング を有効または無効にします。 If set to
省略した場合、デフォルトは |
| ドキュメント | 条件付き | 動的マッピングが無効になっている場合にのみ必要です。 Specifies the fields to index. To learn more, see Define Field Mappings for a MongoDB Search Index. |
| 配列 | 任意 | このインデックスで使用するカスタム アナライザを指定します。 |
| ブール値または保存されたソース定義 | 任意 | Specifies document fields to store for queries performed using the returnedStoredSource option. You can store fields of all MongoDB Search Field Types on MongoDB Search. The
省略した場合、デフォルトは 詳しくは、 MongoDB Search インデックスに保存されたソース フィールドの定義 を参照してください。 |
| 任意 | インデックスで使用する シノニム マッピング を指定します。 シノニム(同意語) を設定すると、同じ意味または似た意味を持つ単語をインデックスして検索できます。 詳しくは、「 MongoDB Search インデックスでのシノニム マッピングの定義 」を参照してください。 |
動作
updateSearchIndexコマンドは、新しいインデックス定義でインデックスビルドをトリガーします。 コマンドから応答を受け取ってから更新されたインデックスが準備完了するまでの間に遅延が発生する可能性があります。
新しいインデックスの構築中も、古いインデックス定義は引き続きクエリをサポートできます。 新しいインデックスの作成が完了すると、古いインデックスは使用できなくなります。 検索インデックスのステータスを確認するには、 $listSearchIndexes集計ステージを使用します。
アクセス制御
配置でアクセス制御が強制される場合、 updateSearchIndexコマンドを実行するユーザーは、データベースまたはコレクションに対するupdateSearchIndex特権アクションを持っている必要があります。
{ resource: { db : <database>, collection: <collection> }, actions: [ "updateSearchIndex" ] }
組み込みのreadWrite } ロールとrestoreロールによってupdateSearchIndex特権が付与されます。 次の例では、 qaデータベースでreadWriteロールを付与しています。
db.grantRolesToUser( "<user>", [ { role: "readWrite", db: "qa" } ] )
出力
updateSearchIndexコマンドが成功すると、次の結果が返されます。
{ ok: 1 }
重要
応答フィールドok: 1は、コマンドが成功したことを示します。 ただし、応答を受け取ってから更新されたインデックスが準備ができて、元のインデックスを置き換えるまでの間にタイムラグが生じる可能性があります。
検索インデックスのステータスを確認するには、 $listSearchIndexes集計ステージを使用します。
例
次の例では、 contactsコレクションでsearchIndex01という名前の検索インデックスを更新します。
db.runCommand( { updateSearchIndex: "contacts", name: "searchIndex01", definition: { mappings: { dynamic: true }, storedSource: { exclude: [ "directors", "imdb.rating" ] } } } )