Docs 菜单
Docs 主页
/
Atlas
/ / /

定义字段映射

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

  • 动态映射:使Atlas Search能够自动索引支持类型的所有字段。

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

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

如果计划对可能超过 2.1 十亿个对象的字段索引,请对集群使用 numPartitions分片

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

要使用动态映射,请在索引定义中将 mappings.dynamic 设立为 true。您还可以通过为要在 mappings.fields 中配置的每个字段指定字段名称、数据类型和其他配置选项来配置各个字段。您可以按任意顺序指定字段。

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": { // Optional, use this to configure individual fields
5 "<field-name>": {
6 "type": "<field-type>",
7 ...
8 },
9 ...
10 }
11 }
12}

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

如果省略 mappings.dynamic字段,则其默认值为 false

1{
2 "mappings": {
3 "dynamic": false, // Optional, if omitted defaults to "false"
4 "fields": {
5 "<field-name>": {
6 "type": "<field-type>",
7 ...
8 },
9 ...
10 }
11 }
12}

您可以将包含多态数据的字段索引为多种类型,方法是为该字段指定一大量字段定义,每个数据类型对应一个字段定义数组。

语法
1{
2 "mappings": {
3 "dynamic": <boolean>,
4 "fields": {
5 "<field-name>": [
6 {
7 "type": "<field-type>",
8 ...
9 },
10 {
11 "type": "<field-type>",
12 ...
13 },
14 ...
15 ],
16 ...
17 },
18 ...
19 }
20}

您可以使用静态和动态映射来指定 Atlas Search 是否必须为集合中所有可动态索引的字段自动创建索引。

使用动态映射自动索引集合中受支持类型的所有字段。仅当您的模式定期更改或未知,或者您正在试验Atlas Search,我们才建议使用动态映射。动态映射索引比静态映射索引占用更多磁盘空间,并且性能可能较低。

当您对包含多态数据的字段进行动态索引, Atlas Search会自动将该字段索引为与该数据对应的所有可动态索引的字段类型。如果该字段包含Atlas Search不会自动索引的数据类型,Atlas Search不会对该数据索引。

Atlas Search使用检测到的数据类型的默认设置动态索引文档中的所有字段。 Atlas Search还会动态索引该文档下的所有嵌套文档,除非您通过将 dynamic 设置为 false 来明确覆盖。

要学习;了解哪些数据类型支持动态索引,请参阅下面的“数据类型”部分。

使用静态映射为您希望动态编制索引选项,或者独立于索引中的其他字段配置单个字段。当您使用静态映射时, Atlas Search仅对您在 mappings.fields 中指定的字段建立索引。

当您对包含多态数据的字段进行静态索引, Atlas Search仅索引与该字段的索引定义中指定的映射相对应的文档。 Atlas Search不会索引与该字段的索引定义中指定的数据类型不匹配的文档。

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

Atlas Search 不支持以下 BSON 数据类型

  • Decimal128

  • 带作用域的 JavaScript 代码

  • Max key

  • Min key

  • 正则表达式

  • 时间戳

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

下表列出了支持的 BSON数据类型 以及可用于索引 BSON 数据类型的 Atlas Search字段类型 。该表还指示启用 动态索引 时Atlas Search是否自动包含Atlas Search字段类型,并列出可用于查询字段值的 操作符和收集器

BSON 类型
Atlas Search 字段类型
已动态索引
运算符和收集器

支持数组中数据类型的操作符。

布尔

Date

Date

double

double

double

32 位整数

32 位整数

64 位整型

64 位整型

null

不适用

对象

所有操作符

对象

embeddedDocument(用于对象数组)

ObjectId

字符串

字符串

字符串

字符串

存在某些限制条件。要了解详情,请参阅如何为数组元素创建索引

对于 string 类型,moreLikeThisqueryString 操作符不支持字符串数组。

Atlas Search 不包括用于索引空值的字段类型,因为 Atlas Search 会自动索引静态和动态索引字段的空值。

已弃用。

注意

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

若要将字段索引为多个类型,请在字段定义数组中定义该字段的类型。

例子

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

1{
2 ...
3 "mappings": {
4 "dynamic": <boolean>,
5 "fields": {
6 "<field-name>": [
7 {
8 "type": "<field-type>",
9 ...
10 },
11 {
12 "type": "<field-type>",
13 ...
14 },
15 ...
16 ],
17 ...
18 },
19 ...
20 }
21}

以下索引定义示例使用静态映射。

  • 默认索引分析器是 lucene.standard

  • 默认搜索分析器是 lucene.standard。如果希望查询词的解析方式与其在 Atlas Search 索引中的存储方式不同,可以更改搜索分析器。

  • 索引指定静态字段映射 (dynamic: false),这意味着未明确提及的字段不会添加索引。因此,索引定义包括:

    • address 字段,其类型为 document。它有两个嵌入式子字段,即 citystate

      city 子字段默认使用 lucene.simple 分析器进行查询。它使用 ignoreAbove 选项忽略任何长度超过 255 字节的字符串。

      state 子字段默认使用 lucene.english 分析器进行查询。

    • company 字段,其类型为 string。它默认使用 lucene.whitespace 分析器进行查询。它有一个名为 mySecondaryAnalyzermulti 分析器,它默认使用 lucene.french 分析器进行查询。

    • employees 字段,它是一组字符串。默认使用 lucene.standard 分析器进行查询。 对于数组索引,Atlas Search 仅需要数组元素的数据类型。您不必在索引定义中指定该数据包含在数组中。

{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"address": {
"type": "document",
"fields": {
"city": {
"type": "string",
"analyzer": "lucene.simple",
"ignoreAbove": 255
},
"state": {
"type": "string",
"analyzer": "lucene.english"
}
}
},
"company": {
"type": "string",
"analyzer": "lucene.whitespace",
"multi": {
"mySecondaryAnalyzer": {
"type": "string",
"analyzer": "lucene.french"
}
}
},
"employees": {
"type": "string",
"analyzer": "lucene.standard"
}
}
}
}

以下索引定义示例同时使用静态和动态映射。

  • 默认索引分析器是 lucene.standard

  • 默认搜索分析器是 lucene.standard。如果希望查询词的解析方式与其在 Atlas Search 索引中的存储方式不同,可以更改搜索分析器。

  • 索引指定静态字段映射 (dynamic: false),这意味着未显式提及的字段不被编入索引。因此,索引定义包括:

    • company 字段,其类型为 string。它默认使用 lucene.whitespace 分析器进行查询。它有一个名为 mySecondaryAnalyzermulti 分析器,它默认使用 lucene.french 分析器进行查询。

    • employees 字段,它是一组字符串。默认情况下,它使用 lucene.standard 分析器进行查询。

    • address字段,其为 document 类型。它有两个嵌入式子字段:citystate。索引定义不显式提及文档中的每个嵌套字段,而支持对文档中所有子字段的动态映射。默认使用 lucene.standard 分析器进行查询。

{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"company": {
"type": "string",
"analyzer": "lucene.whitespace",
"multi": {
"mySecondaryAnalyzer": {
"type": "string",
"analyzer": "lucene.french"
}
}
},
"employees": {
"type": "string",
"analyzer": "lucene.standard"
},
"address": {
"type": "document",
"dynamic": true
}
}
}
}

后退

词元筛选器

在此页面上