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

enabled

拼写容错功能默认启用,但您可以根据需要禁用它:

curl \
  -X PATCH 'MEILISEARCH_URL/indexes/movies/settings/typo-tolerance' \
  -H 'Content-Type: application/json' \
  --data-binary '{ "enabled": false }'

禁用拼写容错后,Meilisearch 将不再把与查询词相差几个字符的单词视为匹配项。例如,查询 phnoe 将不再返回包含单词 phone 的文档。

在大多数情况下,保持拼写容错启用能带来更好的搜索体验。 对于海量或多语言数据集可能是例外情况,因为在这些情况下拼写容错可能会导致误匹配。

minWordSizeForTypos

默认情况下,Meilisearch 对包含 5 个或更多字符的查询词允许 1 个拼写错误,如果查询词长度达到 9 个字符则允许最多 2 个拼写错误。

如果您的数据集中包含 seven,搜索 sevemsevan 都能匹配到 seven。但 tow 不会匹配 two,因为它的长度小于 5 个字符。

您可以通过 minWordSizeForTypos 对象覆盖这些默认设置。以下代码示例将允许 1 个拼写错误的最小词长设为 4,允许 2 个拼写错误的最小词长设为 10

curl \
  -X PATCH 'MEILISEARCH_URL/indexes/movies/settings/typo-tolerance' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "minWordSizeForTypos": {
      "oneTypo": 4,
      "twoTypos": 10
    }
  }'

更新 minWordSizeForTypos 对象时,请注意:

  • oneTypo 必须大于等于 0 且小于等于 twoTypos
  • twoTypos 必须大于等于 oneTypo 且小于等于 255

换句话说:0 ≤ oneTypo ≤ twoTypos ≤ 255

我们建议将 oneTypo 的值保持在 28 之间,twoTypos 的值保持在 414 之间。如果任一值设置过低,可能会得到大量误匹配结果;反之,如果两个值都设置过高,许多搜索查询可能无法受益于拼写容错功能。

首字符拼写错误
Meilisearch 将查询词首字符的拼写错误视为 2 个拼写错误。

连接词处理
在考虑拼写容错的候选词时,Meilisearch 会连接由空格分隔符分隔的多个搜索词。这被视为 1 个拼写错误。例如,搜索 any way 会匹配包含 anyway 的文档。

关于拼写错误计算的更多信息,请参阅下文

disableOnWords

您可以通过将查询词添加到 disableOnWords 列表来禁用对其的拼写容错功能。disableOnWords 不区分大小写。

curl \
  -X PATCH 'MEILISEARCH_URL/indexes/movies/settings/typo-tolerance' \
  -H 'Content-Type: application/json' \
  --data-binary '{
    "disableOnWords": [
      "shrek"
    ]
  }'

在搜索时,Meilisearch 不会对查询词 Shrekshrek 应用拼写容错来匹配文档。

disableOnAttributes

您可以通过将特定文档属性添加到 disableOnAttributes 来禁用该属性的拼写容错功能。以下代码示例禁用了 title 属性的拼写容错:

curl \
  -X PATCH 'MEILISEARCH_URL/indexes/movies/settings/typo-tolerance' \
  -H 'Content-Type: application/json' \
  --data-binary '{ "disableOnAttributes": ["title"] }'

使用上述设置后,title 属性中的匹配将不会容忍任何拼写错误。例如,搜索 beautiful(9个字符)将不会匹配哈维尔·巴登主演的电影《Biutiful》。在默认设置下,这会被视为匹配项。

disableOnNumbers

您可以通过将 disableOnNumbers 设置为 true 来禁用所有索引和搜索请求中对数值的拼写容错功能:

默认情况下,数值的拼写容错是开启的。这可能导致误匹配,例如搜索 2024 会匹配包含 20252004 的文档。

disableOnNumbers 设为 true 时,仅包含数字的查询将只返回完全匹配的结果。除了减少误匹配的情况外,禁用数值的拼写容错还可能提升索引性能。