updateSearchIndex
定義
バージョン 7.0 の新機能: (6.0.7 以降でも利用可能)
既存の Atlas Search インデックスを更新します。
mongosh
メソッド db.collection.updateSearchIndex()
はupdateSearchIndex
データベースコマンドを囲むラッパーを提供します。
重要
このコマンドは、 MongoDB Atlas でホストされている配置でのみ実行でき、 サーバーレスインスタンス で はサポートされていません 。
構文
コマンド構文:
db.runCommand( { updateSearchIndex: "<collection name>", id: "<index Id>", name: "<index name>", definition: { /* search index definition fields */ } } )
コマンドフィールド
updateSearchIndex
コマンドは、次のフィールドがあります。
フィールド | タイプ | 必要性 | 説明 |
---|---|---|---|
updateSearchIndex | string | 必須 | 更新するインデックスを含むコレクションの名前。 |
id | string | 条件付き |
フィールドまたは |
name | string | 条件付き | 更新するインデックスの名前。 フィールドまたは |
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 | 任意 | インデックスで使用する シノニム マッピング を指定します。 シノニム(同意語) を設定すると、同じ意味または似た意味を持つ単語をインデックスして検索できます。 |
動作
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" ] } } } )