错别字容忍度计算
即使搜索查询包含拼写错误或错别字,错别字容忍度也能帮助用户找到相关结果,例如,输入 phnoe
而不是 phone
。您可以为每个索引配置错别字容忍度功能。
Meilisearch 使用前缀莱文斯坦算法来确定文档中的单词是否可能与查询词匹配。
上面引用的错别字数量大致等同于莱文斯坦距离。两个单词 M 和 P 之间的莱文斯坦距离可以认为是“通过对 M 执行以下基本操作将 M 转换为 P 的最小成本”:
- 替换字符(例如,
kitten
→sitten
) - 插入字符(例如,
siting
→sitting
) - 删除字符(例如,
saturday
→satuday
)
默认情况下,Meilisearch 使用以下规则来匹配文档。请注意,这些规则是按单词而不是针对整个查询字符串的。
- 如果查询词的长度在
1
到4
个字符之间,则不允许有错别字。只有包含以此查询词开头或与此查询词长度相同的单词的文档才被认为是有效的 - 如果查询词的长度在
5
到8
个字符之间,则允许 一个错别字。包含与 一个错别字 匹配的单词的文档将被保留以进行下一步处理。 - 如果查询词包含超过
8
个字符,我们最多接受 两个错别字。
这意味着长度为 7
个字符的 saturday
,将使用第二条规则,并匹配包含 一个错别字 的所有文档。例如:
saturday
被接受,因为它与原词相同。satuday
被接受,因为它包含 一个错别字。sutuday
不被接受,因为它包含 两个错别字。caturday
不被接受,因为它包含 两个错别字(如上文所述,单词首字母的错别字会被视为两个错别字)。
错别字容错对 typo
排名规则的影响
typo
排名规则 按匹配查询词的错别字数量递增的顺序对搜索结果进行排序。错别字为 0 的文档排名最高,其次是错别字为 1 的文档,最后是错别字为 2 的文档。
typo
排名规则的存在与否对错别字容错设置没有影响。但是,禁用错别字容错设置实际上也会禁用 typo
排名规则。 这是因为所有返回的文档都将包含 0
个错别字。
总结一下
- 错别字容错会影响 Meilisearch 在匹配文档时的宽松程度
typo
排名规则会影响 Meilisearch 对其结果进行排序的方式- 禁用错别字容错也会禁用
typo