拼写容错(Typo tolerance)功能帮助用户在搜索查询包含拼写错误或打字错误时仍能找到相关结果,例如将 phone 打成 phnoe。您可以为每个索引配置拼写容错功能

Meilisearch 使用前缀莱文斯坦算法来判断文档中的某个词是否可能是查询词的匹配项。

上文提到的错字数量大致等同于莱文斯坦距离。两个词 MP 之间的莱文斯坦距离可以理解为”通过对 M 执行以下基本操作将其转换为 P 的最小成本”:

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

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

  • 如果查询词长度在 14 个字符之间,不允许任何拼写错误。只有包含以该查询词开头长度相同词语的文档才会被考虑
  • 如果查询词长度在 58 个字符之间,允许一个拼写错误。包含一个拼写错误匹配词的文档会进入后续处理
  • 如果查询词超过 8 个字符,我们最多接受两个拼写错误

这意味着 saturday(7个字符)适用第二条规则,会匹配所有包含一个拼写错误的文档。例如:

  • saturday 会被接受,因为是相同单词
  • satuday 会被接受,因为包含一个拼写错误
  • sutuday 不会被接受,因为包含两个拼写错误
  • caturday 不会被接受,因为包含两个拼写错误(如上文所述,单词首字母的拼写错误会被视为两个错误)

拼写容错对 typo 排序规则的影响

typo 排序规则会根据匹配查询词中的拼写错误数量对搜索结果进行升序排序。拼写错误为 0 的文档将排名最高,其次是 1 个和 2 个拼写错误的文档。

typo 排序规则的启用或停用不会影响拼写容错设置。但是,禁用拼写容错设置实际上也会禁用 typo 排序规则。这是因为所有返回的文档都将包含 0 个拼写错误。

总结如下:

  • 拼写容错影响 Meilisearch 在匹配文档时的宽容度
  • typo 排序规则影响 Meilisearch 对结果的排序方式
  • 禁用拼写容错也会同时禁用 typo 规则