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
命令接受以下字段:
字段 | 类型 | 必要性 | 说明 |
---|---|---|---|
| 字符串 | 必需 | 包含要更新的索引的collection名称。 |
| 字符串 | 可选的 |
您必须指定 |
| 字符串 | 可选的 | 要更新的索引的名称。 您必须指定 |
| 文档 | 必需 | 描述更新后的搜索索引定义的文档。 指定的定义将替换搜索索引中先前的定义。 有关 |
搜索索引定义语法
搜索索引定义包含以下字段:
{ 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>" } ] }
字段 | 类型 | 必要性 | 说明 |
---|---|---|---|
| 字符串 | Optional | 如果省略此字段,索引将使用标准分析器。 |
| 字符串 | Optional | |
| 对象 | 必需 | 指定如何在该索引的不同路径上为字段建立索引。 |
| 布尔 | Optional | 为此索引启用或禁用动态字段映射。 如果设置为 如果设置为 如果省略,则默认值为 |
| 文档 | 可选的 | 仅在禁用了动态映射时才是必需的。 指定要索引的字段。 要了解更多信息,请参阅定义字段映射。 |
| 阵列 | Optional | 指定要在此索引中使用的自定义分析器。 |
| 布尔值或存储的源定义 | Optional | 为使用returnedStoredSource选项执行的查询指定要存储的文档字段。 您可以在 Atlas Search 上存储所有数据类型的字段。
如果省略,则默认值为 要了解更多信息,请参阅在 Atlas Search 索引中定义存储的源字段。 |
| 同义词映射定义数组 | Optional | 指定要在索引中使用的同义词映射。 通过配置同义词,可以索引和搜索具有相同或相似含义的单词。 要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射。 |
行为
updateSearchIndex
命令使用新的索引定义Atlas Triggers索引构建。收到命令响应与更新后的索引准备就绪之间可能存在延迟。
在构建新索引时,旧索引定义仍可支持查询。 一旦新索引完成构建,旧索引就不再可用。 要查看搜索索引的状态,请使用$listSearchIndexes
聚合阶段。
访问控制
如果您的部署强制执行访问控制,则运行updateSearchIndex
命令的用户必须对数据库或collection具有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
聚合阶段。
例子
以下示例更新collection上名为searchIndex01
contacts
的搜索索引:
db.runCommand( { updateSearchIndex: "contacts", name: "searchIndex01", definition: { mappings: { dynamic: true }, storedSource: { exclude: [ "directors", "imdb.rating" ] } } } )