Docs 菜单
Docs 主页
/ /

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

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

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

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

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

提示

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

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

autocomplete 默认下,动态映射中不包含类型。要将字段索引为 autocomplete 类型,可以使用 静态映射 或配置 typeSet 以将 autocomplete 包含在动态映射中。

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

选项
类型
必要性
说明
默认

type

字符串

必需

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

analyzer

字符串

可选

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

lucene.standard

maxGrams

int

可选

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

注意

我们建议将 maxGrams 值设置为小于或等于 15,以优化性能。较高的值会增加索引的大小,并可能影响性能。如果自动完成需要超过 15 个字符,我们建议配置自定义分析器以避免查询被截断。

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
...

与对字符串字段进行索引相比,使用 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 操作符的更多信息并查看查询示例,请参阅自动完成。

有关演示如何使用正则表达式运行不区分大小写前缀开头为包含查询的示例,请参阅使用MongoDB Search而不是正则表达式查询。

后退

阵列

在此页面上