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