Docs 菜单

Docs 主页开发应用程序MongoDB Manual

updateSearchIndex

在此页面上

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

7.0 版本中的新增功能:(也可从 6.0.7 开始使用

更新现有的 Atlas Search 索引

mongosh方法db.collection.updateSearchIndex()提供了updateSearchIndex数据库命令的包装器。

重要

此命令只能在MongoDB Atlas上托管的部署上运行,并且需要至少为 M 10的 Atlas 集群层。

命令语法:

db.runCommand(
{
updateSearchIndex: "<collection name>",
id: "<index Id>",
name: "<index name>",
definition: {
/* search index definition fields */
}
}
)

updateSearchIndex 命令接受以下字段:

字段
类型
必要性
说明
updateSearchIndex
字符串
必需
包含要更新的索引的collection名称。
id
字符串
可选的

id 要更新的索引的名称。

您必须指定idname字段。

name
字符串
可选的

要更新的索引的名称。

您必须指定idname字段。

definition
文档
必需

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

有关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
字符串
Optional

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

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

searchAnalyzer
字符串
Optional

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

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

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

mappings
对象
Optional
指定如何在该索引的不同路径上为字段建立索引。
mappings.dynamic
布尔
Optional

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

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

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

如果省略,则默认值为 false

mappings.fields
文档
可选的

仅在禁用了动态映射时才是必需的。

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

analyzers
阵列
Optional
指定要在此索引中使用的自定义分析器
storedSource
布尔值或存储的源定义
Optional

为使用returnedStoredSource选项执行的查询指定要存储的文档字段。

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

  • true— 存储所有字段

  • false— 不存储任何字段

  • 一个对象,用于将存储中的字段指定为includeexclude

如果省略,则默认值为 false

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

synonyms
Optional

指定要在索引中使用的同义词映射。 通过配置同义词,您可以索引和搜索具有相同或相似含义的单词。

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

updateSearchIndex命令使用新的索引定义Atlas Triggers索引构建。收到命令响应与更新后的索引准备就绪之间可能存在延迟。

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

如果您的部署强制执行访问控制,则运行updateSearchIndex命令的用户必须对数据库或collection具有updateSearchIndex权限操作:

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

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