对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

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

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

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

有关动态映射注意事项,请参阅 动态映射。

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

选项
类型
必要性
说明
默认

type

字符串

必需

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

analyzer

字符串

可选

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

lucene.standard

maxGrams

int

可选

每个索引序列的最大字符数。该值限制索引词元的字符长度。当您搜索比 maxGrams 值长的词时, MongoDB Search 会将词元截断为 maxGrams 长度。

有关 maxGrams 最佳实践,请参阅 maxGrams 配置。

15

minGrams

int

可选

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

2

tokenization

枚举

可选

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

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

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

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

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

The quick brown fox jumps over the lazy dog.

使用 minGrams2maxGrams5 进行分词时, MongoDB 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
...

有关性能考虑,请参阅“分词性能。

edgeGram

foldDiacritics

布尔

可选

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

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

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

true

similarity.type

字符串

可选

在使用 autocomplete 操作符进行评分时,所用的字符串映射的相似度算法名称。值可以是以下之一:bm25booleanstableTfl

要学习;了解有关可用相似度算法的更多信息,请参阅分数详细信息。

bm25

maxGrams 选项指定索引过程中生成的子字符串的最大长度。增加 maxGrams 可以生成更多子字符串,从而改善对较长查询的匹配。将其设置为超出您所需的值会增加索引大小并影响索引性能。

配置 maxGrams 时,请考虑以下最佳实践:

  • 默认不超过 15。尽可能将 maxGrams 设置为不超过 15,以避免不必要的索引增长。

  • 与查询长度一致。根据用户查询的典型长度设置 maxGrams,而不是针对最差情况进行索引。

  • 避免过度索引。如果您的查询短于当前 maxGrams 值,则可能会索引超出必要的数据量。

  • Use an alternative for longer queries. If your queries regularly exceed 15 characters, use a custom analyzer for prefix, contains, and suffix patterns.

与对 string 字段进行索引相比,使用 edgeGramrightEdgeGramnGram 分词策略对字段进行索引以支持自动完成的计算成本和索引存储成本更高。

对于指定的词元化策略,MongoDB Search 将顺序词元连接起来,然后再发出(“平铺”)。MongoDB Search 发出长度在 minGramsmaxGrams 个字符之间的词元:

  • 保留小于minGrams的词元。

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

MongoDB Search 用于动态映射的默认字段类型不包括 autocomplete 类型。在动态映射中使用 autocomplete 类型会增加索引大小和资源使用量,并产生意外的评分结果。在静态映射中使用 autocomplete

但是,如果您需要在动态映射中包含 autocomplete,可以将其添加到自定义 typeSet 定义中。要了解有关 autocomplete 和自定义 typeSet 配置的更多信息,请参阅 索引大小和配置。

如果您的数据集包含大量文档或数据范围较广,为 自动完成 操作符构建此索引可能需要一些时间。为减少新索引构建对其他索引和查询的影响,请仅使用 autocomplete 类型创建单独的索引。

有关索引性能的考虑,请参阅索引性能考虑。

如要了解有关 autocomplete 操作符的更多信息并查看查询示例,请参阅自动完成。

For examples that demonstrate how to run case-insensitive, prefix, starts with, and contains queries using regex expressions, see Use $search Instead of $text or $regex.