Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs 菜单
Docs 主页
/ /

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

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

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

  • 值为字符串数组的字段。要了解更多信息,请参阅如何对数组元素进行索引

  • 作为 embeddedDocuments 类型索引的文档数组中的字符串字段。

    提示

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

    要学习;了解更多信息,请参阅MongoDB搜索索引性能注意事项。

  • MongoDB Search 用于动态映射的默认设立集中不包含 autocomplete 类型。要将字符串字段动态索引为 autocomplete 类型,您可以在自定义 typeSet 定义中包含 autocomplete 类型。但是,autocomplete 具有独特的性能、存储和评分特征,可能不适合动态映射。我们建议仅在静态映射中使用 autocomplete。要学习更多信息,请参阅MongoDB Search 索引性能。

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

选项
类型
必要性
说明
默认

type

字符串

必需

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

analyzer

字符串

可选

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

lucene.standard

maxGrams

int

可选

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

We recommend setting the maxGrams value to be less than or equal to 15 to optimize performance. A higher value increases the size of the index and can impact performance. If you require more than 15 characters for autocompletion, we recommend configuring custom analyzer to avoid truncating queries.

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 值对以下字符序列进行索引。

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

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

  • 保留小于minGrams的词元。

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

edgeGram

foldDiacritics

布尔

可选

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

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

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

true

similarity.type

字符串

可选

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

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

bm25

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

For examples that demonstrate how to run case-insensitive, prefix, starts with, and contains queries using regex expressions, see Use MongoDB Search Instead of Regex Queries.

后退

阵列

在此页面上