您可以使用MongoDB Search autocomplete 类型对字符串字段中的文本值索引以支持自动完成。 您可以使用autocomplete操作符查询索引为 autocomplete 类型的字段。
您还可以使用 autocomplete 类型创建索引:
值为字符串数组的字段。要了解更多信息,请参阅如何对数组元素进行索引。
作为 embeddedDocuments 类型索引的文档数组中的 string 字段。有关索引构建时间的考虑,请参阅 索引构建时间。
有关动态映射注意事项,请参阅 动态映射。
Define the Index for the autocomplete Type
Configure autocomplete Field Properties
MongoDB Search autocomplete 类型采用以下参数:
选项 | 类型 | 必要性 | 说明 | 默认 | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 字符串 | 必需 | 标识此字段类型的人类可读标签。值必须是 | |||||||||||||||||||||||
| 字符串 | 可选 |
| |||||||||||||||||||||||
| int | 可选 | 每个索引序列的最大字符数。该值限制索引词元的字符长度。当您搜索比 有关 |
| ||||||||||||||||||||||
| int | 可选 | 每个索引序列的最小字符数。我们建议将 |
| ||||||||||||||||||||||
| 枚举 | 可选 | 对字段进行索引以支持自动完成时使用的分词策略。值可以是以下值之一:
使用 有关性能考虑,请参阅“分词性能。” |
| ||||||||||||||||||||||
| 布尔 | 可选 | 指示是否执行 规范化的标记,例如包含或删除索引文本中的变音符号。值可以是以下值之一:
|
| ||||||||||||||||||||||
| 字符串 | 可选 | 在使用 autocomplete 操作符进行评分时,所用的字符串映射的相似度算法名称。值可以是以下之一: 要学习;了解有关可用相似度算法的更多信息,请参阅分数详细信息。 |
|
Try an Example for the autocomplete Type
Considerations
maxGrams 配置
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, andsuffixpatterns.
分词性能
与对 string 字段进行索引相比,使用 edgeGram、rightEdgeGram 或 nGram 分词策略对字段进行索引以支持自动完成的计算成本和索引存储成本更高。
对于指定的词元化策略,MongoDB Search 将顺序词元连接起来,然后再发出(“平铺”)。MongoDB Search 发出长度在 minGrams 到 maxGrams 个字符之间的词元:
保留小于
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.