想要更好地控制您的搜索设置?了解我们的灵活的基础设施定价

回到主页Meilisearch 的标志
返回文章

掌控 Meilisearch 的错别字容忍度

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

2022年5月30日5分钟阅读
Carolina Ferreira
卡罗莱纳·费雷拉Meilisearch 开发者宣传员@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
卡罗莱纳·费雷拉2024年9月24日
Meilisearch is too slow

Meilisearch 太慢了

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

Clément Renault
克莱门特·雷诺2024年8月20日
© . This site is unofficial and not affiliated with Meilisearch.