Docs 菜单
Docs 主页
/
MongoDB Atlas
/ / /

定义字段映射

在此页面上

  • 静态与动态映射
  • 静态映射
  • 动态映射
  • 数据类型
  • 限制
  • 将字段索引为多个数据类型
  • 示例
  • 静态映射示例
  • 组合映射示例

创建 Atlas Search 索引时,您可以:

  • 使用静态映射指定要编制索引的字段。

  • 配置 Atlas Search 以使用动态映射自动索引所有支持的字段类型。

要使用静态映射,必须在集合中明确包含要创建索引的字段。在 type 字段中,在字段定义中指定字段的 数据类型。或者为字段指定字段定义数组,每个数据类型一个。

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

您可以按任意顺序定义 Atlas Search 索引定义中的字段。

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

使用静态映射为希望动态添加索引的字段配置索引选项,或不依赖索引中其他字段而配置单个字段。

对于静态映射,将 mappings.dynamic 设置为 false,并使用 mappings.fields 指定要添加索引的字段。Atlas Search 仅使用特定选项为指定字段建立索引。如果索引的字段包含多态数据,则 Atlas Search 仅索引与该字段的索引定义指定的映射相对应的文档,而忽略包含如下值的文档:这些值不属于该字段的索引定义指定的数据类型。

不能使用点表示法对嵌套字段进行静态索引。为嵌套字段定义索引时,必须为该嵌套字段的每个父字段定义映射。本页的示例部分展示了嵌套在 address 字段内的 city 字段的索引语法。

如果您的模式定期更改或未知,或者当试验 Atlas Search 时,请使用动态映射。您可以将整个索引配置为使用动态映射,或指定要动态映射的各个字段,例如document类型的字段。使用动态映射之前,请参阅数据类型表。

对于动态映射,请将 mappings.dynamic 设置为 true。Atlas Search 会自动为每个文档中支持类型 的字段建立索引。对于字符串 类型的字段,Atlas Search 会将字段存储在 mongot 上。

注意

与静态映射索引相比,动态映射索引占用的磁盘空间更大,性能也可能更低。

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

  • Decimal128

  • 带作用域的 JavaScript 代码

  • Max key

  • Min key

  • 正则表达式

  • 时间戳

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

注意

当动态索引具有多态数据的字段时,Atlas Search 会自动将该字段索引为与数据对应的所有可动态索引字段类型。如果字段包含的数据类型是 Atlas Search 不会自动索引的类型,则 Atlas Search 不会为该数据建立索引。

BSON 类型
Atlas Search 字段类型
已动态索引
运算符和收集器
支持数组中数据类型的操作符。
布尔
Date
Date
double
double
double
knnVector(已弃用)
32 位整数
32 位整数
64 位整型
64 位整型
null
不适用
对象
所有操作符
对象
embeddedDocument(用于对象数组)
ObjectId
字符串
字符串
字符串
字符串

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

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

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

注意

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

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

如果计划对可能超过此限制的字段进行索引,则必须对分片进行分集群。示例,如果您使用 embeddedDocuments字段类型, Atlas Search索引的对象可能会超过此限制。这会导致索引转换为 STALE 状态,并可能导致查询结果过时。

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

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

例子

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

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 分析器进行查询。

      要了解有关 multi 分析器的更多信息,请参阅路径构造。

    • 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 分析器进行查询。要了解有关 multi 分析器的更多信息,请参阅路径构建

    • 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
}
}
}
}

后退

词元筛选器