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

如何对字符串字段进行索引以实现高效筛选和排序

在此页面上

  • 查看 token 类型的行为
  • 查看 token 类型限制
  • token 类型定义索引
  • 配置 token 字段属性
  • token 类型使用示例

您可以使用 Atlas Search token 类型来索引 string 字段,对 Atlas 搜索结果进行排序。然后,您可以在查询中使用 $search sort 选项按索引字段对结果进行排序。要了解详情,请参阅对 Atlas Search 结果进行排序 。您还可以使用 Atlas Search token 类型来索引 string 字段,以预筛选 $vectorSearch 查询分析的数据。要了解更多信息,请参阅 Atlas Vector Search 概述。

要使用以下操作符对string字段运行查询,必须将该字段索引为Atlas Search token 类型:

  • 等于

  • in

  • 范围

要了解更多信息,请参阅每个操作符的相关文档。

当您将字段索引为token类型时,Atlas Search 会将字符串中的术语作为单个术语(可搜索术语)进行索引,并将它们存储在列式存储中,以便进行高效的筛选或排序操作。您可以使用规范化器来转换词元。 默认情况下,规范化器设置为none ,因此 Atlas Search 按原始形式对字符串进行搜索索引。

Atlas Search stringtoken类型之间的主要区别在于,Atlas Search 为索引为string类型的字段创建一个或多个词元,而 Atlas Search 仅为索引为token类型的字段创建单个词元。

如果被索引为token字段类型的字符串超过 8181 个字符,Atlas Search 会在索引之前将其截断为 8181 个字符。

当您将字段索引为token类型时,您也必须将该字段索引为string类型才能使用文本短语等操作符查询文本值。 对于以下操作符,您无需将字段索引为string类型也可查询字段中的文本值:

您无法将索引为embeddedDocuments类型的字段的子字段索引为token类型。

要定义 token 类型的索引,请在 Atlas UI 中选择您的首选配置方法,然后选择数据库和集合。

  1. 单击 Refine Your Index 配置索引。

  2. Field Mappings 部分中,单击 Add Field 打开 Add Field Mapping 窗口。

  3. 单击 Customized Configuration(连接)。

  4. Field Name 下拉菜单中选择要索引的字段。

    注意

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

  5. 单击 Data Type(添加数据)下拉列表并选择 Token(插入文档)。

  6. (可选)展开并配置该字段的 Token Properties。要了解更多信息,请参阅配置 token 字段属性。

  7. 单击 Add(连接)。

以下是 token 类型的 JSON 语法。将默认索引定义替换为以下内容。要了解有关字段的更多信息,请参阅字段属性

{
"mappings": {
"dynamic": true|false,
"fields": {
"<field-name>": {
"type": "token",
"normalizer": "lowercase | none"
}
}
}
}

Atlas Search token 类型采用以下参数:

选项
类型
必要性
说明
默认

type

字符串

必需

标识此字段类型的人类可读标签。值必须是 token

normalizer

字符串

Optional

对字段值执行的转换类型。 值可以是以下之一:

  • lowercase — 将字符串字段中的文本值转换为小写。

  • none - 不执行任何转换。

如果未显式设置此选项,则默认为none

none

以下索引定义示例使用 sample_mflix.movies 集合。如果您的集群上已加载示例数据,则可以使用 Atlas 用户界面中的可视化编辑器或 JSON 编辑器来配置索引。选择首选配置方法后,选择数据库和集合并优化索引以添加字段映射。

以下索引定义将title字段中的字符串值索引为 Atlas Search token类型,并将字段值转换为lowercase ,这允许您执行以下操作:

  • title字段执行normalizer指定的不区分大小写排序。

  • 使用以下操作符对title字段运行精确匹配查询:

  1. Add Field Mapping 窗口中,从 Field Name 下拉列表中选择 title

  2. 单击 Data Type(添加数据)下拉列表并选择 Token(插入文档)。

  3. 展开Token Properties并从Normalizer下拉列表中选择lowercase

  4. 单击 Add(连接)。

将默认索引定义替换为以下索引定义。

{
"mappings": {
"dynamic": false,
"fields": {
"title": {
"type": "token",
"normalizer": "lowercase"
}
}
}
}

以下索引定义将 genres 字段索引为 stringtoken 类型,以返回以下内容:

  • 使用 Atlas Search 操作符(如文本短语和其他在 genres 字段上执行文本搜索的操作符)搜索查询结果。

  • 使用 genres 字段上的 $search 排序选项对查询结果进行排序。

  • 使用 equalsinrange 等 Atlas Search 操作符进行查询的精确匹配。

  1. Add Field Mapping 窗口中,从 Field Name 下拉列表中选择 genres

  2. 单击 Data Type(添加数据)下拉列表并选择 Token(插入文档)。

  3. 单击 Add(连接)。

  4. 重复步骤 1,并从 Data Type 下拉列表中选择 String

  5. 查看 String Properties 的默认设置,然后单击 Add

将默认索引定义替换为以下索引定义。

{
"mappings": {
"dynamic": false,
"fields": {
"genres": [{
"type": "string"
},
{
"type": "token"
}]
}
}
}

后退

stringFacet