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

为 MongoDB Search 索引定义字段映射

创建MongoDB 搜索索引时,可以使用以下方法指定要索引的字段:

  • 动态映射:启用 MongoDB 搜索根据默认或配置的字段类型 (typeSet) 自动为所有字段建立索引。

  • 静态映射:允许您指定要索引的字段。

  • 默认情况下,对于大于 2,100,000,000 个索引对象的索引,MongoDB Search 将停止在副本集或单个分片上复制对这些索引的更改,其中每个已建立索引的文档或嵌套 embeddedDocument 都算作一个对象。这意味着您的索引是可查询的,但您可能会得到过时的结果。

    如果计划对可能超过 2,100,000,000 个对象的字段进行索引,其中索引对象是顶层文档或嵌入式文档,请使用 numPartitions 索引选项对索引进行分区(仅在搜索节点部署上支持)或 分片集群。

  • 您无法对字段名称开头包含美元 ($) 符号的字段创建索引。

  • 自动完成字段类型可以创建大型索引,并且构建时间比其他字段类型更长。尽管您可以通过将 autocomplete 类型包含在自定义 typeSet 定义中来在动态映射中使用该类型,但我们建议仅在静态映射中使用 autocomplete 类型,以避免意外的性能、存储和计分方面的影响。要学习更多信息,请参阅 如何为自动完成的字段编制索引 和 提高 MongoDB Search 索引性能。

以下语法演示了如何启用 MongoDB 搜索以使用动态和静态映射来索引字段。要了解有关动态和静态映射的更多信息,请参阅动态和静态映射。

{ "mappings": { "dynamic": true|false | { "typeSet": "<typeset-name>" }, "fields": { "<field-name>": { "type": "<field-type>", ... }, ... } }, "typeSets": [ { "name": "<typeset-name>", "types": [ { "type": "<field-type>", ... }, ... ] }, ... ]}

您可以通过以下方式配置MongoDB搜索:

  • 动态映射,用于根据默认或配置的类型设立(typeSet) 自动为字段索引

  • 仅索引指定字段的静态映射

您还可以将动态映射与 静态映射结合使用。静态映射会覆盖动态映射配置。当为字段定义静态映射时,MongoDB Search 仅根据静态映射定义对该字段进行索引。动态映射不再适用于该字段。

例如,如果您启用 dynamic: true,MongoDB Search 默认会将 string 字段索引为 string 类型。如果您为特定 string 字段添加静态 autocomplete 映射,MongoDB Search 仅会将该字段索引为 autocomplete 类型。它也不会索引为 string,除非您在静态映射中明确包含 string。要将字段索引为这两种类型,必须在字段的静态映射数组中定义这两种类型。

MongoDB 搜索动态映射允许您将MongoDB 搜索配置为自动递归地索引数据中的字段。可以根据默认类型设立或通过配置 typeSet 对字段进行索引。

您可以启用或配置动态映射:

  • 在根 mappings 级别应用整个文档。

  • [推荐] 在 document字段中键入要应用指定对象的字段。

  • [推荐] 在 embeddedDocuments 字段类型中,要应用需要逐元素查询比较的指定对象数组(类似于 $elemMatch)。

注意

最佳实践

动态映射可能会导致索引大量独特字段,这会占用更多磁盘空间,并可能会降低性能。仅在需要索引定期变更或未知字段时使用动态映射。始终在文档内使用动态映射,而不是在父文档级别使用动态映射。

当您使用动态映射对数据进行索引时:

  • MongoDB 搜索还会对数据中 document 对象中的 typeSet 支持的所有嵌套字段进行动态索引。

  • 如果字段包含多态数据,MongoDB Search 会自动将该字段索引为索引中使用的 typeSet 支持的所有类型。如果字段包含 typeSet 不支持类型的数据,MongoDB Search 将不会索引该数据。

MongoDB Search 使用默认 typeSet,当 dynamic 设置为 true 时。在默认 typeSet 中,MongoDB Search 会将其索引 BSON 类型作为 MongoDB Search 字段类型。下表显示了 `BSON` 类型,MongoDB Search 在使用默认 typeSet 时会自动将其索引为 MongoDB Search 字段类型。MongoDB Search 也会自动索引以下 BSON 类型,当它们包含在数组和对象中时。

BSON 类型
MongoDB搜索字段类型

布尔

Date

双精度浮点数、32 位整数、64 位整数

ObjectId

字符串

UUID

null

以下是为动态映射启用默认类型设立的语法:

{ "mappings": { "dynamic": true }}

有关演示使用默认typeSet对所有字段进行索引的索引示例,请参阅动态映射示例。

通过配置 typeSet 来动态指定要索引的 MongoDB Search 字段类型。您可以将任何 BSON 类型配置为作为任何 MongoDB Search 字段类型自动索引,document、embeddedDocuments、vector 或已弃用的字段类型除外。

typeSet 采用以下语法:

注意

您无法从 Atlas 用户界面 Visual Editor 中配置 typeSet。请改用 Atlas 用户界面 JSON Editor。

{ "mappings": { "dynamic": { "typeSet": "<typeset-name>" }, "fields": { "<field-name>": { "type": "<field-type>", ... }, ... } }, "typeSets": [ { "name": "<typeset-name>", "types": [ { "type": "<field-type>" }, ... ] }, ... ]}

在配置 typeSet 之前,请考虑以下事项:

  • 不能在同一 typeSet对象中多次定义相同的字段类型。您只能为每种字段类型配置一个 typeSet 定义。

    示例,您不能在同一 typeSet 定义中为 number 类型定义多个配置。

  • 您可以使用 multi分析器配置动态映射。

有关演示使用自定义 typeSet 配置的索引示例,请参阅动态映射示例。

使用静态映射为您不希望动态编制索引的字段配置索引选项,或者独立于索引中的其他字段配置单个字段。使用静态映射时, MongoDB Search 仅对您在 mappings.fields 中指定的字段编制索引。您还可以使用静态映射将字段排除在索引之外。

要使用静态映射仅为某些字段配置索引选项,请将 mappings.dynamic 设为 false,并为要建立索引的每个字段指定字段名称、数据类型和其他配置选项。您可以按任意顺序指定字段。

如果您忽略 mappings.dynamic 字段,则默认为 false。

{ "mappings": { "dynamic": true|false, "fields": { "<field-name>": { "type": "<field-type>", ... }, ... } }}

要定义嵌套字段的索引,必须为该嵌套字段的每个父字段定义映射。不能使用点表示法对嵌套字段进行静态索引。有关示例,请参阅下面的示例或组合映射示例。

您可以使用静态映射将字段索引为多种类型。要将字段索引为多种类型,请在字段定义数组中为字段定义类型。您可以使用静态映射将任何字段索引为任何支持的类型。要学习更多信息,请参阅MongoDB 搜索字段类型。

以下示例显示了将一个字段索引为多种类型的字段定义。

{ "mappings": { "dynamic": true|false | { "typeSet": "<type-set-name>" }, "fields": { "<field-name>": [ { "type": "<field-type>", ... }, { "type": "<field-type>", ... }, ... ], ... } }. "typeSets": [ { "name": "<typeset-name>", "types": [ { "type": "<field-type>" }, ... ] }, ... ]}

有关演示静态映射的其他索引示例,请参阅静态映射示例。

MongoDB Search 不支持以下BSON数据类型:

  • Decimal128

  • 带作用域的 JavaScript 代码

  • Max key

  • Min key

  • 正则表达式

  • 时间戳

MongoDB Search 会自动在 mongot 上存储字符串类型的字段。您可以使用索引定义中的 在MongoDB搜索索引中定义存储的源字段 选项,在MongoDB搜索上存储所有支持 数据类型 的字段。要学习;了解有关 mongot 和MongoDB Search节点架构的更多信息,请参阅MongoDB Search 部署选项。

下表列举了支持的 BSON 数据类型 和可用于对 BSON 数据类型进行索引的 MongoDB Search 字段类型 。该表还列出了您可用于查询字段值的 操作符和收集器。

这些操作符不支持字符串数组。

MongoDB Search 不包含用于索引null 值的字段类型,因为MongoDB Search 会自动为静态和动态索引字段的 null 值索引。

已弃用。要了解有关已弃用的分面(Facet)字段类型及其更新的对应字段类型的更多信息,请参阅比较分面字段类型。

double 或 int 值的数组。

注意

您可以使用 选项在MongoDB SearchstoredSource 上存储所有支持数据类型的字段。

对 sample_mflix.movies 集合的以下示例索引定义展示了如何使用动态和静态映射对字段进行索引。您可以在集群上加载示例数据来尝试这些示例。要了解如何创建 MongoDB Search 索引,请参阅MongoDB Search 快速入门。

以下示例索引定义演示了如何使用动态映射。

以下示例索引定义演示了如何使用静态映射。

以下索引定义示例将动态映射与静态映射相结合。