对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

db. 集合.updateSearchIndex()(mongosh方法)

db.collection.updateSearchIndex()

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

更新现有Atlas Search索引或Atlas Vector Search索引。

重要

mongosh 方法

本页面提供 mongosh 方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。

有关数据库命令,请参阅 updateSearchIndex 命令。

如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。

此方法可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

命令语法:

db.<collection>.updateSearchIndex(
<name>,
{
<definition>
}
)

updateSearchIndex() 采用这些字段:

字段
类型
必要性
说明

name

字符串

必需

要更新的搜索索引的名称。

definition

文档

必需

描述要创建的索引的文档。 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

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

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

searchAnalyzer

字符串

Optional

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

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

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

mappings

对象

必需

指定如何在该索引的不同路径上为字段建立索引。

mappings.dynamic

布尔

Optional

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

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

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

如果省略,则默认值为 false。

mappings.fields

文档

可选的

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

指定要索引的字段。要学习;了解更多信息,请参阅为MongoDB搜索索引定义字段映射。

analyzers

阵列

Optional

指定要在此索引中使用的自定义分析器。

storedSource

布尔值或存储的源定义

Optional

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

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

  • true— 存储所有字段

  • false— 不存储任何字段

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

如果省略,则默认值为 false。

要学习;了解更多信息,请参阅在MongoDB搜索索引中定义存储源字段。

synonyms

Optional

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

要学习;了解更多信息,请参阅在MongoDB搜索索引中定义同义词映射。

向量搜索索引定义包含以下字段:

{
"fields": [
{
"type": "vector" | "filter",
"path": "<field-to-index>",
"numDimensions": <number-of-dimensions>,
"similarity": "euclidean" | "cosine" | "dotProduct"
}
]
}

有关向量搜索索引定义字段的说明,请参阅如何为向量搜索的字段创建索引。

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

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

如果您的部署强制执行访问控制,则运行 updateSearchIndex() 的用户必须在数据库或集合上执行 updateSearchIndex 权限操作:

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

内置的readWrite和restore角色提供updateSearchIndex权限。以下示例授予对qa数据库的readWrite角色:

db.grantRolesToUser(
"<user>",
[ { role: "readWrite", db: "qa" } ]
)

以下示例创建了一个新的 Atlas Search 索引,然后更新了该索引。

  1. 在moviescollection上创建名为searchIndex01的搜索索引:

    db.movies.createSearchIndex(
    "searchIndex01",
    {
    mappings: { dynamic: true },
    storedSource: {
    exclude: [ "imdb.rating" ]
    }
    }
    )
  2. 更新searchIndex01索引:

    db.movies.updateSearchIndex(
    "searchIndex01",
    {
    mappings: { dynamic: true },
    storedSource: {
    exclude: [ "movies" ]
    }
    }
    )