文档菜单
文档首页
/
MongoDB 手册
/ / /

更新搜索索引

在本页上

  • 定义
  • 语法
  • 命令字段
  • 搜索索引定义语法
  • 行为
  • 访问控制
  • 输出
  • 示例
updateSearchIndex

在版本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
条件

要更新的索引的id

您必须指定idname字段。

name
string
条件

要更新的索引名称。

您必须指定idname字段。

definition
document
必需

描述更新的搜索索引定义的文档。指定的定义将替换搜索索引中的先前定义。

有关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
可选

指定在索引时应用于字符串字段的分析器。

如果您省略此字段,索引将使用标准分析器。

searchAnalyzer
string
可选

指定在搜索文本之前应用于查询文本的分析器。

如果您省略此字段,索引将使用在analyzer字段中指定的相同分析器。

如果您省略了searchAnalyzeranalyzer字段,索引将使用标准分析器。

mappings
对象
必需
指定如何为该索引在各个路径上索引字段。
动态映射
布尔型
可选

启用或禁用此索引的动态字段映射。

如果设置为true,则索引包含所有包含支持的数据类型。的字段。

如果设置为false,您必须使用mappings.fields指定要索引的单独字段。

如果省略,则默认为false

字段映射
document
条件

仅在禁用动态映射时需要。

指定要索引的字段。要了解更多信息,请参阅定义字段映射。

分析器
数组
可选
指定在此索引中使用的自定义分析器。
存储源
布尔型或存储源定义
可选

指定用于使用返回存储源选项执行的查询时要存储的文档字段。

您可以在Atlas Search上存储所有数据类型的字段。storedSource的值可以是以下之一:

  • true,存储所有字段

  • false,不存储任何字段

  • 一个对象,指定要包含排除的存储字段

如果省略,则默认为false

要了解更多信息,请参阅在您的Atlas Search索引中定义存储源字段。

同义词
可选

指定要在索引中使用的同义词映射。配置同义词允许您索引和搜索具有相同或类似含义的单词。

要了解更多信息,请参阅在您的Atlas Search索引中定义同义词映射。

更新索引命令会触发使用新的索引定义构建索引。从接收到命令响应到更新索引准备就绪之间可能会有延迟。

在新的索引正在构建时,旧索引定义仍然可以支持查询。一旦新的索引构建完成,旧索引就不再可用。要查看搜索索引的状态,请使用$listSearchIndexes 聚合阶段。

如果您的部署实施访问控制,则运行更新索引命令的用户必须在数据库或集合上具有updateSearchIndex 权限操作

{
resource: {
db : <database>,
collection: <collection>
},
actions: [ "updateSearchIndex" ]
}

内置的readWriterestore 角色提供 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" ]
}
}
} )

返回

删除搜索索引