错别字容忍度可帮助用户即使其搜索查询包含拼写错误或错别字也能找到相关结果,例如,输入 phnoe 而不是 phone。您可以为每个索引配置错别字容忍度功能

Meilisearch 使用前缀Levenshtein 算法来确定文档中的某个词是否可能与查询词匹配。

上述错别字数量大致相当于 Levenshtein 距离。两个词 MP 之间的 Levenshtein 距离可以被认为是“通过对 M 执行以下基本操作将 M 转换为 P 的最小成本”

  • 字符替换(例如,kittensitten
  • 字符插入(例如,sitingsitting
  • 字符删除(例如,saturdaysatuday

默认情况下,Meilisearch 使用以下规则来匹配文档。请注意,这些规则是按词而非整个查询字符串生效。

  • 如果查询词介于 14 个字符之间,则不允许错别字。只有包含以该查询词开头与该查询词长度相同的词的文档才被视为有效。
  • 如果查询词介于 58 个字符之间,则允许一个错别字。包含与一个错别字匹配的词的文档将保留以进行下一步处理。
  • 如果查询词包含超过 8 个字符,我们最多接受两个错别字

这意味着长度为 7 个字符的 saturday 使用第二条规则,并匹配所有包含一个错别字的文档。例如

  • saturday 被接受,因为它与原词相同。
  • satuday 被接受,因为它包含一个错别字
  • sutuday 不被接受,因为它包含两个错别字
  • caturday 不被接受,因为它包含两个错别字(如上文所述,单词首字母的错别字被视为两个错别字)。

错别字容忍度对 typo 排序规则的影响

typo 排序规则根据匹配查询词上的错别字数量升序对搜索结果进行排序。0 个错别字的文档排名最高,其次是 1 个错别字,然后是 2 个错别字。

typo 排序规则的存在与否对错别字容忍度设置没有影响。但是,**禁用错别字容忍度设置实际上也会禁用 typo 排序规则。** 这是因为所有返回的文档都将包含 0 个错别字。

总结

  • 错别字容忍度影响 Meilisearch 在匹配文档时的宽松程度。
  • typo 排序规则影响 Meilisearch 排序其结果的方式。
  • 禁用错别字容忍度也会禁用 typo