Docs 菜单

如何为自动完成的字段创建索引

您可以使用 Atlas Search autocomplete 类型对字符串字段中的文本值进行索引以支持自动完成。您可以使用自动完成操作符查询作为 autocomplete 类型索引的字段。

您还可以使用 autocomplete 类型创建索引:

提示

如果要使用 autocomplete 操作符对大量文档和数据运行 Atlas Search 查询,构建该索引可能需要一些时间。或者,您可以创建仅包含 autocomplete 类型的单独索引,以减少构建索引时对其他索引和查询的影响。

要了解更多信息,请参阅 Atlas Search 索引性能注意事项

Atlas Search 不会动态地对 autocomplete 类型的字段进行索引。您必须 使用静态映射autocomplete 字段进行索引。您可以使用 Atlas 用户界面中的可视化编辑器JSON 编辑器autocomplete类型的字段进行索引。

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

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

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

  3. 单击 Customized Configuration(连接)。

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

    注意

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

    对于包含术语 emailurl 的字段名称,Atlas Search Visual Editor 建议使用带有uaxUrlEmail分词器的自定义分析器来索引电子邮件地址或 URL 值。单击 Create urlEmailAnalyzer,创建自定义分析器并将其应用到字段的 Autocomplete Properties 中。

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

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

  7. 单击 Add(连接)。

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

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "autocomplete",
7 "analyzer": "<lucene-analyzer>",
8 "tokenization": "edgeGram|rightEdgeGram|nGram",
9 "minGrams": <2>,
10 "maxGrams": <15>,
11 "foldDiacritics": true|false
12 }
13 }
14 }
15}

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

选项
类型
必要性
说明
默认

type

字符串

必需

标识该字段类型的人类可读标签。值必须为字符串。

analyzer

字符串

可选

要用于该自动完成映射的分析器名称。除了 lucene.kuromoji 语言分析器和以下自定义分析器分词器和词元筛选器以外,您可以使用任何 Atlas Search 分析器:

lucene.standard

maxGrams

int

可选

每个索引序列的最大字符数。该值限制索引词元的字符长度。在搜索长度超过 maxGrams 值的词语时,Atlas Search 将词元截断为 maxGrams 长度。

15

minGrams

int

可选

每个索引序列的最小字符数。我们建议将 4 作为最小值。小于 4 的值可能会影响性能,因为索引可能会变得非常大。我们建议仅对 edgeGram 使用默认值 2

2

tokenization

枚举

可选

对字段进行索引以支持自动完成时使用的分词策略。值可以是以下值之一:

  • edgeGram — 通过从词语左侧开始的可变长度字符序列创建可索引词元(称为 grams),该序列的边界是由用于该自动完成映射的分析器定义的。

  • rightEdgeGram — 通过从词语右侧开始的可变长度字符序列创建可索引词元(称为 grams),该序列的边界是由用于该自动完成映射的分析器定义的。

  • nGram — 在词语上滑动可变长度字符窗口以创建可索引词元(称为 grams)。Atlas Search 为 nGram 创建的词元数超过 edgeGramrightEdgeGram。因此,nGram 需要更多的空间和时间对字段进行索引。nGram 更适合查询具有较长复合词或不使用空格的语言。

edgeGramrightEdgeGramnGram是在字母级别应用的。例如,请考虑以下句子:

The quick brown fox jumps over the lazy dog.

在使用 minGrams2maxGrams5 进行分词时,Atlas Search 根据您选择的 tokenization 值对以下字符序列进行索引:

th
the
the{SPACE}
the q
qu
qui
quic
uick
...
og
dog
{SPACE}dog
y dog
zy
azy
lazy
{SPACE}lazy
he
the
{SPACE}the
r the
er
ver
over
{SPACE}over
...
th
the
the{SPACE}
the q
he
he{SPACE}
he q
he qu
e{SPACE}
e q
e qu
e qui
{SPACE}q
{SPACE}qu
{SPACE}qui
{SPACE}quic
qu
qui
quic
quick
...

与对字符串字段进行索引相比,使用 edgeGramrightEdgeGramnGram 分词策略对字段进行索引以支持自动完成的计算成本更高。该索引占用的空间比具有常规字符串字段的索引多。

对于指定的分词策略,Atlas Search 在发出顺序词元之前应用以下过程来连接它们。 此过程有时称为“叠瓦”。 Atlas Search 发出长度在minGramsmaxGrams字符之间的词元:

  • 保留小于minGrams的词元。

  • 将大于minGrams但小于maxGrams的词元与后续词元连接,以创建长度不超过指定最大字符数的词元。

edgeGram

foldDiacritics

布尔

可选

指示是否执行规范化 的标记,例如包含或删除索引文本中的变音符号。值可以是以下值之一:

  • true - 执行规范化,例如忽略索引和查询文本中的变音符号。例如,搜索 cafè 会返回包含字符 cafècafe 的结果,因为 Atlas Search 会返回带有或不带有变音符号的结果。

  • false — 不执行规范化,例如忽略索引和查询文本中的变音符号。因此, Atlas Search仅返回与查询中带或不带变音符号的字符串匹配的结果。示例,搜索cafè 仅返回包含 cafè 字符的结果。搜索cafe 仅返回包含 cafe 字符的结果。

true

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

以下索引定义示例仅将 title 字段索引为 autocomplete 类型,以支持使用 autocomplete 操作符对该字段进行 search-as-you-type 查询。该索引定义还指定以下内容:

  • 使用标准分析器根据单词边界将文本值划分为术语。

  • 使用 edgeGram 分词策略从单词左侧开始对字符进行索引。

  • 每个索引序列至少索引 3 个字符。

  • 每个索引序列最多索引 5 个字符。

  • 在索引和查询文本中包含变音符号。

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

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

  3. Autocomplete Properties 进行以下更改:

    最大词语数

    将值设置为 5

    最小词语数

    将值设置为 3

    分词器

    从下拉列表中选择 edgeGram

    折叠变音符号

    从下拉列表中选择 false

  4. 单击 Add(连接)。

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

1{
2 "mappings": {
3 "dynamic": false,
4 "fields": {
5 "title": {
6 "type": "autocomplete",
7 "analyzer": "lucene.standard",
8 "tokenization": "edgeGram",
9 "minGrams": 3,
10 "maxGrams": 5,
11 "foldDiacritics": false
12 }
13 }
14 }
15}

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

您也可以通过在数组中指定其他类型来将字段索引为其他类型。例如,以下索引定义将 title 字段索引为以下类型:

  • autocomplete 类型,支持使用 autocomplete 操作符自动完成查询。

  • string 键入以支持使用运算符(如文本短语等)进行文本搜索。

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

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

  3. Autocomplete Properties 进行以下更改:

    最大词语数

    将值设置为 15

    最小词语数

    将值设置为 2

    分词器

    从下拉列表中选择 edgeGram

    折叠变音符号

    从下拉列表中选择 false

  4. 单击 Add(连接)。

  5. 重复步骤 bd

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

  7. 接受默认的 String Properties 设置,然后单击 Add

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

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "title": [
6 {
7 "type": "autocomplete",
8 "analyzer": "lucene.standard",
9 "tokenization": "edgeGram",
10 "minGrams": 2,
11 "maxGrams": 15,
12 "foldDiacritics": false
13 },
14 {
15 "type": "string"
16 }
17 ]
18 }
19 }
20}

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

以下索引定义示例仅将 email 字段索引为 autocomplete 类型,以支持使用 autocomplete 操作符对该字段进行 search-as-you-type 查询。该索引定义指定以下内容:

  • 使用关键字分析器接受字符串或字符串数组以作为参数,并将它们作为单个词语(词元)进行索引。

  • 使用 nGram 分词器器将文本分词为给定大小的数据块或“n-gram”。

  • 每个索引序列至少索引 3 个字符。

  • 每个索引序列最多索引 15 个字符。

  • 在索引和查询文本中包含变音符号。

您还可以使用 uaxUrlEmail 分词器对 URL 和电子邮件地址进行分词。要了解更多信息,请参阅uaxUrlEmail。

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

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

  3. Autocomplete Properties 进行以下更改:

    分析器

    从下拉列表中选择 lucene.keyword

    最大词语数

    将值设置为 15

    最小词语数

    将值设置为 3

    分词器

    从下拉列表中选择 nGram

    折叠变音符号

    从下拉列表中选择 false

  4. 单击 Add(连接)。

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

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "email": {
6 "type": "autocomplete",
7 "analyzer": "lucene.keyword",
8 "tokenization": "nGram",
9 "minGrams": 3,
10 "maxGrams": 15,
11 "foldDiacritics": false
12 }
13 }
14 }
15}

另请参阅:其他索引定义示例