db.collection.createSearchIndex()
在此页面上
定义
7.0 版本中的新增功能:(也可从 6.0.7 开始使用)
在指定集合上创建 Atlas Search索引或Vector Search索引。
重要
mongosh 方法
本页面提供 mongosh
方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。
有关数据库命令,请参阅 createSearchIndexes
命令。
如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
M 0 、M 2和 M 5集群或无服务器实例不支持此命令。 有关更多信息,请参阅不支持的命令。
语法
命令语法:
db.<collection>.createSearchIndex( <name>, <type>, { <definition> } )
命令字段
createSearchIndex()
采用这些字段:
字段 | 类型 | 必要性 | 说明 |
---|---|---|---|
name | 字符串 | Optional | 要创建的搜索索引的名称。 不能在单个collection上创建多个同名索引。 如果未指定 |
type | 字符串 | Optional | 要创建的搜索索引的类型。 您可以指定以下任一项:
如果省略 |
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 | |
mappings | 对象 | 必需 | 指定如何在该索引的不同路径上为字段建立索引。 |
mappings.dynamic | 布尔 | Optional | 为此索引启用或禁用动态字段映射。 如果设置为 如果设置为 如果省略,则默认值为 |
mappings.fields | 文档 | 可选的 | 仅在禁用了动态映射时才是必需的。 指定要索引的字段。 要了解更多信息,请参阅定义字段映射。 |
analyzers | 阵列 | Optional | 指定要在此索引中使用的自定义分析器。 |
storedSource | 布尔值或存储的源定义 | Optional | 为使用returnedStoredSource选项执行的查询指定要存储的文档字段。 您可以在 Atlas Search 上存储所有数据类型的字段。
如果省略,则默认值为 要了解更多信息,请参阅在 Atlas Search 索引中定义存储的源字段。 |
synonyms | 同义词映射定义数组 | Optional | 指定要在索引中使用的同义词映射。 通过配置同义词,可以索引和搜索具有相同或相似含义的单词。 要了解更多信息,请参阅在 Atlas Search 索引中定义同义词映射。 |
向量搜索索引定义事务语法
向量搜索索引定义包含以下字段:
{ "fields": [ { "type": "vector" | "filter", "path": "<field-to-index>", "numDimensions": <number-of-dimensions>, "similarity": "euclidean" | "cosine" | "dotProduct" } ] }
有关向量搜索索引定义字段的说明,请参阅如何为向量搜索的字段创建索引。
行为
createSearchIndex()
Atlas Triggers索引构建。收到命令响应与索引准备就绪之间可能存在延迟。
要查看搜索索引的状态,请使用$listSearchIndexes
聚合阶段。
访问控制
如果您的部署强制执行访问控制,则运行 createSearchIndex()
的用户必须在数据库或集合上执行 createSearchIndexes
权限操作:
{ resource: { db : <database>, collection: <collection> }, actions: [ "createSearchIndexes" ] }
内置readWrite
角色提供createSearchIndexes
权限。以下示例向accountUser01
readWrite
授予products
数据库上的 角色:
db.grantRolesToUser( "accountUser01", [ { role: "readWrite", db: "products" } ] )
示例
创建所有字段的搜索索引
searchIndex01
movies
以下示例在collection上创建了一个名为 的搜索索引:
db.movies.createSearchIndex( "searchIndex01", { mappings: { dynamic: true } } )
索引定义指定mappings: { dynamic: true }
,这意味着该索引包含集合中具有受支持数据类型的所有字段。
使用语言分析器创建搜索索引
语言分析器引入了停用词,这些词的重要性不足以进行索引。
frenchIndex01
cars
以下示例在collection集合上创建名为 的搜索索引,并在 字段上指定lucene.french
fr
分析器:
db.cars.createSearchIndex( "frenchIndex01", { mappings: { fields: { subject: { fields: { fr: { analyzer: "lucene.french", type: "string" } }, type: "document" } } } } )
要了解有关语言分析器的更多信息,请参阅语言分析器。
使用默认名称创建搜索索引
以下createSearchIndex()
方法仅指定索引定义并省略索引名称。 此命令会在collection上创建名称为default
food
的搜索索引:
db.food.createSearchIndex( { mappings: { fields: { title: { type: "string" } } } } )
创建 Vector Search 索引
以下示例在 movies
集合上创建一个名为 vectorSearchIndex01
的向量Atlas Search索引:
db.movies.createSearchIndex( "vectorSearchIndex01", "vectorSearch", { fields: [ { type: "vector", numDimensions: 1, path: "genre", similarity: "cosine" } ] } )
向量Atlas Search索引包含一个维度并对 genre
字段编制索引。