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

createSearchIndexes(数据库命令)

createSearchIndexes

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

在指定集合上创建一个或多个Atlas Search索引或Vector Search 索引。

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

重要

此命令只能在MongoDB Atlas上托管的部署上运行。

命令语法:

db.runCommand(
{
createSearchIndexes: "<collection name>",
indexes: [
{
name: "<index name>",
type: "<search index type>",
definition: {
/* search index definition fields */
}
},
...
]
}
)

createSearchIndexes 命令接受以下字段:

字段
类型
必要性
说明

createSearchIndexes

字符串

必需

要在其上创建搜索索引的collection的名称。

indexes

阵列

必需

描述要创建的索引的文档数组。

indexes.name

字符串

Optional

要创建的搜索索引的名称。

不能在单个collection上创建多个同名索引。

如果未指定name ,则索引将命名为default 。

indexes.type

字符串

Optional

要创建的搜索索引的类型。 您可以指定以下任一项:

  • search

  • vectorSearch

如果省略type字段,则索引类型为search 。

indexes.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"
}
]
}

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

createSearchIndexes命令会Atlas Triggers索引构建。收到命令响应与索引准备就绪之间可能存在延迟。

要查看搜索索引的状态,请使用$listSearchIndexes聚合阶段。

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

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

内置readWrite角色提供createSearchIndexes权限。以下示例向accountUser01 readWrite授予products 数据库上的 角色:

db.grantRolesToUser(
"accountUser01",
[ { role: "readWrite", db: "products" } ]
)

createSearchIndexes命令输出类似于以下内容:

{
ok: 1,
indexesCreated: [
{
id: "<index Id>",
name: "<index name>"
}
]
}

重要

响应字段ok: 1指示命令成功。 但是,从收到响应到创建的索引可供使用之间可能存在延迟。

要查看搜索索引的状态,请使用$listSearchIndexes聚合阶段。

searchIndex01contacts以下示例在collection上创建了一个名为 的搜索索引:

db.runCommand( {
createSearchIndexes: "contacts",
indexes: [
{
name: "searchIndex01",
definition: { mappings: { dynamic: true } }
}
]
} )

索引定义指定mappings: { dynamic: true } ,这意味着该索引包含集合中具有受支持数据类型的所有字段。

语言分析器引入了停用词,这些词的重要性不足以进行索引。

frenchIndex01cars以下示例在collection集合上创建名为 的搜索索引,并在 字段上指定lucene.french fr分析器:

db.runCommand( {
createSearchIndexes: "cars",
indexes: [
{
name: "frenchIndex01",
definition: {
mappings: {
fields: {
subject: {
fields: {
fr: {
analyzer: "lucene.french",
type: "string"
}
},
type: "document"
}
}
}
}
}
]
} )

要了解有关语言分析器的更多信息,请参阅语言分析器。

以下命令在products collection 上创建两个搜索索引searchIndex02和searchIndex03 :

db.runCommand( {
createSearchIndexes: "products",
indexes: [
{
name: "searchIndex02",
definition: {
mappings: {
fields: {
title: {
type: "string",
analyzer: "lucene.simple"
}
}
}
}
},
{
name: "searchIndex03",
definition:
{
mappings: { dynamic: true }
}
}
]
} )

searchIndex02 对title字段使用简单分析器。 简易分析器根据非字母字符(例如空格、标点符号或数字)将文本划分为可搜索词语。

searchIndex03 使用动态字段映射,这意味着索引包含集合中具有受支持数据类型的所有字段。

以下示例在 movies 集合上创建一个名为 vectorSearchIndex01 的向量Atlas Search索引:

db.runCommand( {
createSearchIndexes: "movies",
indexes: [
{
name: "vectorSearchIndex01",
type: "vectorSearch",
definition: {
fields: [
{
type: "vector",
numDimensions: 1,
path: "genre",
similarity: "cosine"
}
]
}
}
]
} )

向量Atlas Search索引包含一个维度并对 genre 字段编制索引。