更新搜索索引
定义
新在版本7.0: (自6.0.7版本起也可用)
更新现有的Atlas Search索引.
The mongosh
方法db.collection.updateSearchIndex()
提供了对 updateSearchIndex
数据库命令的封装。
重要
此命令只能在托管在 MongoDB Atlas 的部署上运行,并且在 无服务器实例 中 不受支持。
语法
命令语法
db.runCommand( { updateSearchIndex: "<collection name>", id: "<index Id>", name: "<index name>", definition: { /* search index definition fields */ } } )
命令字段
updateSearchIndex
命令接受以下字段
字段 | 类型 | 必要性 | 描述 |
---|---|---|---|
更新搜索索引 | string | 必需 | 包含要更新的索引的集合名称。 |
id | string | 条件 | 要更新的索引的 您必须指定 |
name | string | 条件 | 要更新的索引名称。 您必须指定 |
definition | document | 必需 | 描述更新的搜索索引定义的文档。指定的定义将替换搜索索引中的先前定义。 有关 |
搜索索引定义语法
搜索索引定义接受以下字段
{ 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 | 可选 | |
searchAnalyzer | string | 可选 | |
mappings | 对象 | 必需 | 指定如何为该索引在各个路径上索引字段。 |
动态映射 | 布尔型 | 可选 | 启用或禁用此索引的动态字段映射。 如果设置为 如果设置为 如果省略,则默认为 |
字段映射 | document | 条件 | 仅在禁用动态映射时需要。 指定要索引的字段。要了解更多信息,请参阅定义字段映射。 |
分析器 | 数组 | 可选 | 指定在此索引中使用的自定义分析器。 |
存储源 | 布尔型或存储源定义 | 可选 | 指定用于使用返回存储源选项执行的查询时要存储的文档字段。 您可以在Atlas Search上存储所有数据类型的字段。
如果省略,则默认为 要了解更多信息,请参阅在您的Atlas Search索引中定义存储源字段。 |
同义词 | 同义词映射定义的数组 | 可选 | 指定要在索引中使用的同义词映射。配置同义词允许您索引和搜索具有相同或类似含义的单词。 要了解更多信息,请参阅在您的Atlas Search索引中定义同义词映射。 |
行为
更新索引命令会触发使用新的索引定义构建索引。从接收到命令响应到更新索引准备就绪之间可能会有延迟。
在新的索引正在构建时,旧索引定义仍然可以支持查询。一旦新的索引构建完成,旧索引就不再可用。要查看搜索索引的状态,请使用$listSearchIndexes
聚合阶段。
访问控制
如果您的部署实施访问控制,则运行更新索引命令的用户必须在数据库或集合上具有updateSearchIndex
权限操作
{ resource: { db : <database>, collection: <collection> }, actions: [ "updateSearchIndex" ] }
内置的readWrite
和 restore
角色提供 updateSearchIndex
权限。以下示例授予了 readWrite
角色在 qa
数据库上的权限
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" ] } } } )