前往主页Meilisearch 标志
返回文章
2022年5月30日

掌控 Meilisearch 的拼写容错能力

没有人喜欢“未找到结果”页面。了解如何避免在您的应用程序中返回过少或过多的搜索结果。

Carolina Ferreira
Carolina FerreiraMeilisearch 开发者布道师@CarolainFG
Take control of Meilisearch's typo tolerance

听着,听着!Meilisearch 新版本发布了,它带来了一系列炫酷新功能,包括一个期待已久的功能:拼写容错自定义!

一段时间以来,我们一直收到用户希望禁用或微调拼写容错的反馈。Meilisearch v0.21 引入了短语搜索,如果查询词被双引号括起来,例如:“african-american poet”,它将返回包含精确查询词的文档。

这是满足用户需求的一大步,但仍不够。经过仔细研究,时机已到:拼写容错自定义已成为现实 🎉

但是等等,自定义拼写容错到底是什么意思?更重要的是,拼写容错又是什么意思?

传统默认行为

Meilisearch 具有拼写容错能力,这意味着即使存在拼写错误,它也能理解您的搜索。但能力越大责任越大,这意味着要设定界限以保持结果的相关性。这转化为以下三条规则:

  1. 如果查询词少于 5 个字符,则不允许任何拼写错误
  2. 如果查询词长度在 5 到 8 个字符之间,则只允许 1 个拼写错误
  3. 如果查询词长度超过 8 个字符,则允许 2 个拼写错误

因此,如果您正在查找 lost 却不小心输入了 last,您将无法获得所需结果,因为它只有 4 个字符长。

但是,如果输入 greeec 而不是 greece,则会检索到预期的文档,因为它有 6 个字符长,因此允许一个拼写错误。

这些规则默认应用,并作为 Meilisearch 开箱即用配置的一部分,提供强大且相关的搜索。然而,俗话说,规则就是用来打破的……

自定义:新的可能性视野

我们知道每个项目都不同,有些用户需要配置拼写容错以适应他们项目的特殊性。我们听到了您的心声!

让我们来看看新的拼写容错设置

"typoTolerance": {
    "enabled": true, 
    "minWordSizeForTypos": {
        "oneTypo": 5,
        "twoTypos": 10
    },
    "disableOnWords": [],
    "disableOnAttributes": []
}

查看上面 typoTolerance 对象,您现在可以

  • 通过设置 "enabled": false 完全禁用拼写容错 😱
  • 使用 "disableOnWords" 在一组特定词语上部分禁用拼写容错
  • 在所需的文档属性上禁用拼写容错 "disableOnAttributes"

您还可以通过修改单词的最小长度来接受一个或两个拼写错误,从而微调拼写容错设置。

总之,您可以完全控制此功能。

有关拼写容错自定义的更多深入信息,您可以阅读文档的专门章节

亲自尝试一下

俗话说,一张图片胜过千言万语(我停不下来这些流行语,抱歉);这就是为什么我创建了一个演示来展示不同的拼写容错配置如何影响返回的搜索结果。您可以在这里测试它。

我们将使用 Hakan Özler书籍数据集。为了演示目的,我对原始数据集进行了一些更改,您可以在 GitHub 上找到转换后的数据集。您可以按书名、ISBN(该书籍的 ID)、作者或其描述中的词语来搜索书籍。

我创建了两个具有不同拼写容错设置的相同索引。一个索引使用开箱即用的拼写容错设置,而另一个则使用以下设置:

const customTypoTolerance = {
    disableOnAttributes: ['isbn'],
    minWordSizeForTypos: {
        oneTypo: 2,
        twoTypos: 4
    }
}

isbn 上禁用了拼写容错,并且允许较短词语存在拼写错误:对于 2 和 3 个字符长的词语允许一个拼写错误,对于任何更长的词语允许两个拼写错误。

Meilisearch returns different search results depending on the typo tolerance configuration for the same query

通常最好为最终用户提供一些结果,而不是没有结果。这就是我将阈值设置为建议的最小值的原因。尝试输入 flx 看看会发生什么!

然而,有时最好只返回精确匹配。例如,当通过唯一标识符搜索文档时。ISBN 正是如此:一本书的 ID。因此,我禁用了 isbn 属性上的拼写容错。

让我们尝试通过 ISBN 查找一本名为“Well-Grounded Rubyist”的书;在搜索栏中输入 1933988657

When searching for an ISBN, Meilisearch returns only one document when typo tolerance has been disabled on the isbn field

如您所见,两种设置下我们都得到了所需的书籍。然而,当拼写容错启用时,我们会得到多个结果。搜索一个无效的 ISBN,例如 1933988676,在拼写容错启用时仍然会返回结果;这可能会造成混淆和误导。

结论

我没有禁用任何单词的拼写容错,因为考虑到这个数据集,我认为没有必要,您呢?如果您想进行一些修改并尝试获得更相关的结果,请随意:您可以在GitHub 上找到代码

但是,如果您喜欢真正的挑战,我有一个。 Literal,一个面向图书读者的在线平台,使用 Meilisearch 搜索书架。他们非常乐意分享他们一直在使用以提供相关搜索结果的秘诀

{
   "displayedAttributes":[
      "id",
      "title",
      "workId",
      "authors",
      "categories",
      "popularity"
   ],
   "searchableAttributes":[
      "authors",
      "title",
      "categories"
   ],
   "filterableAttributes":[
      "isbn10",
      "isbn13",
      "language"
   ],
   "distinctAttribute":"workId",
   "rankingRules":[
      "words",
      "typo",
      "popularity:desc",
      "proximity",
      "attribute",
      "sort",
      "exactness"
   ]
}

您能想出更好的配置吗?您能想到完美的拼写容错设置来提高相关性吗?

如您所知,我们非常重视用户反馈。请随时查看我们的公开路线图,并为您希望在未来版本中看到的功能投票,或提交新的功能想法。您还可以查看我们的产品仓库,提出建议或加入现有讨论以改进产品。

如果您喜欢 Meilisearch 并想支持我们,在 GitHub 上点亮一颗星对我们意义重大 🥰

Meilisearch indexes embeddings 7x faster with binary quantization

Meilisearch 使用二值量化将嵌入索引速度提高 7 倍

通过将二值量化与向量存储 Arroy 结合实现,在保持搜索相关性和效率的同时,大大减少了大型嵌入的磁盘空间使用和索引时间。

Tamo
Tamo2024年11月29日
How to add AI-powered search to a React app

如何为 React 应用程序添加 AI 搜索功能

使用 Meilisearch 的 AI 搜索功能构建一个 React 电影搜索和推荐应用程序。

Carolina Ferreira
Carolina Ferreira2024年9月24日
Meilisearch is too slow

Meilisearch 速度太慢

在这篇博客文章中,我们将探讨 Meilisearch 文档索引器所需的改进。我们将讨论当前的索引引擎、其缺点以及优化性能的新技术。

Clément Renault
Clément Renault2024年8月20日