Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs 菜单
Docs 主页
/ /

定义字段映射

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

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

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

  • 默认下, MongoDB Search 停止复制副本副本集或单个分片上超过 2.1 十亿个索引对象的索引更改,其中每个已建立索引的文档或嵌套 embeddedDocument 都算作单个对象。这意味着您的索引仍然可查询,但可能会得到过时的结果。

    If you plan to index fields that might exceed 2.1 billion objects, where an index object is a top-level document or an embedded document, use the numPartitions index option to partition your index (supported only on Search Nodes deployment) or shard your cluster.

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

  • 与其他字段类型相比,自动完成字段类型可以创建大型索引,且构建时间更长。虽然您可以通过将 autocomplete 类型包含在自定义 typeSet 定义中来在动态映射中使用该类型,但我们建议仅在静态映射中使用 autocomplete 类型,以避免对性能、存储和评分产生意外影响。要学习;了解更多信息,请参阅如何为自动完成索引字段MongoDB搜索索引性能。

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

1{
2 "mappings": {
3 "dynamic": true|false | {
4 "typeSet": "<typeset-name>"
5 },
6 "fields": {
7 "<field-name>": {
8 "type": "<field-type>",
9 ...
10 },
11 ...
12 }
13 },
14 "typeSets": [
15 {
16 "name": "<typeset-name>",
17 "types": [
18 {
19 "type": "<field-type>",
20 ...
21 },
22 ...
23 ]
24 },
25 ...
26 ]
27}

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

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

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

您还可以将动态映射与静态映射结合使用。静态映射会覆盖动态映射配置。

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

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

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

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

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

注意

最佳实践

动态映射可能会导致对大量唯一字段索引,从而占用更多磁盘空间并且可能降低性能。仅当需要对定期更改或未知的字段索引时,才使用动态映射。始终在文档中而不是在父文档级别使用动态映射。

提示

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

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

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

dynamic 设立为 true 时,MongoDB 搜索使用默认的typeSet。在默认的typeSet中, MongoDB Search 将 BSON 类型作为MongoDB Search字段类型进行索引。 下表显示了当您使用默认typeSet 时, MongoDB搜索自动索引为MongoDB搜索字段类型的BSON 类型。当以下BSON 类型包含在数组和对象中时,MongoDB搜索还会自动对其进行索引。

BSON类型
MongoDB搜索字段类型

布尔

Date

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

ObjectId

字符串

UUID

null

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

1{
2 "mappings": {
3 "dynamic": true
4 }
5}

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

通过配置 typeSet,指定要动态索引的 MongoDB 搜索字段类型。您可以将任何 BSON 类型配置为任何 MongoDB Search 字段类型自动编制索引,但不包括 documentembeddedDocumentsvector 或已弃用的字段类型。

typeSet 采用以下语法:

注意

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

1{
2 "mappings": {
3 "dynamic": {
4 "typeSet": "<typeset-name>"
5 },
6 "fields": {
7 "<field-name>": {
8 "type": "<field-type>",
9 ...
10 },
11 ...
12 }
13 },
14 "typeSets": [
15 {
16 "name": "<typeset-name>",
17 "types": [
18 {
19 "type": "<field-type>"
20 },
21 ...
22 ]
23 },
24 ...
25 ]
26}

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

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

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

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

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

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

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

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

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "<field-type>",
7 ...
8 },
9 ...
10 }
11 }
12}

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

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

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

1{
2 "mappings": {
3 "dynamic": true|false | {
4 "typeSet": "<type-set-name>"
5 },
6 "fields": {
7 "<field-name>": [
8 {
9 "type": "<field-type>",
10 ...
11 },
12 {
13 "type": "<field-type>",
14 ...
15 },
16 ...
17 ],
18 ...
19 }
20 }.
21 "typeSets": [
22 {
23 "name": "<typeset-name>",
24 "types": [
25 {
26 "type": "<field-type>"
27 },
28 ...
29 ]
30 },
31 ...
32 ]
33}

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

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

  • Decimal128

  • 带作用域的 JavaScript 代码

  • Max key

  • Min key

  • 正则表达式

  • 时间戳

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

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

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

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

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

doubleint 值的数组。

注意

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

The following sample index definitions on the sample_mflix.movies collection demonstrate how to index fields using dynamic and static mappings. You can load the sample data on your cluster to try the examples. To learn more about how to create MongoDB Search indexes, see MongoDB Search Quick Start.

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

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

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

后退

词元筛选器

在此页面上