拼写容错计算
拼写容错帮助用户即使在搜索查询中包含拼写错误或错字时也能找到相关结果,例如,输入 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