Meilisearch v0.29 发布,带来一项新功能:匹配策略自定义!
考虑以下情况:用户发送一个包含两个词的搜索请求。当没有足够的文档满足请求的 limit
时会发生什么?引擎应该只返回包含所有查询词的文档吗?还是应该返回更多文档?如果是这样,应该用什么标准来返回它们?
这就是匹配策略的作用。匹配策略用于在引擎没有找到包含所有查询词的足够文档时匹配查询词。这不是一个容易做出的决定,它高度依赖于用户搜索的数据类型。幸运的是,现在你可以在搜索时选择要应用的策略 🎉
一点历史
早在 2021 年,所有 v0.21 之前的版本只返回所有查询词都存在的文档。因此,如果我搜索“Peter Parker”,它只会返回包含“peter”和“parker”这两个词的文档。这种匹配策略称为:all
,因为文档必须包含所有查询词才能返回。

排名规则 是 Meilisearch 中最重要的功能之一,用于确保结果相关性。词语排名规则声明以下内容
结果按匹配的查询词数量降序排序。首先返回包含所有查询词的文档。
这条规则已经存在于我们的文档中一段时间了,并且伴随着以下警告消息
目前,返回的文档必须包含所有查询词。因此,这条规则目前不会影响搜索结果。
随着 v0.21 的发布,词语规则开始生效,因此所有查询词都存在的限制消失了。
从那时起,如果没有足够的文档包含所有查询词,Meilisearch 就会从查询末尾开始,一次删除一个词。因此,如果我搜索“Peter Parker”,它首先会返回包含两个词的文档,然后返回只包含“Peter”的文档。
这种匹配策略被称为 last
,因为 Meilisearch 会删除查询的最后一个词。

事实证明,许多用户对之前的匹配行为非常满意。不幸的是,这种改变不允许他们迁移到更新版本的 Meilisearch,这使得他们无法从它的许多改进中获益:搜索时的排序、地理搜索、细粒度的 API 密钥权限、多租户等。他们不仅错过了所有这些,而且还会错过所有即将推出的酷炫功能!😱
不要惊慌!版本 0.29 已经来救场了!
闭环反馈
现在,可以在搜索时选择所需的匹配策略。默认策略为 last
;如果想使用 all
,所有(wink wink)需要做的就是在搜索主体中指定它,如下所示
curl \
-X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Content-Type: application/json' \
--data-binary '{ "q": "peter parker", "matchingStrategy": "all" }'
这项功能自 2021 年 9 月就开始开发,当时我们的产品经理 Guillaume Mourier 启动了 “匹配查询词的策略”讨论,以收集有关该问题的反馈。我们感谢所有参与者抽出时间分享他们的意见 🙏 Meilisearch 离不开社区的支持 🥰
使用两种策略的原因有很多,就像用例很多一样。还不确定要选择哪种策略?我已经创建了一个演示,以便您可以测试两种策略,帮助您做出决定 😊
演示
此演示使用 电影数据集,该数据集在 Meilisearch 的 快速入门指南 中使用,并在整个 文档 中广泛使用。
我并没有对设置进行任何更改。我只是索引了数据集并保留了默认配置。纯洁如雪 ❄️
执行搜索时,您可以点击按钮修改 matchingStrategy
搜索参数,并查看根据所用策略的不同结果。
在以下地址试用 👉 matching-strategy.meilisearch.com
如果您缺乏想法或需要一些查询词的灵感,我列出了一些查询想法,从 2 个词到 10 个词不等
- forrest gump
- big fat liar
- return to never land
- the purple rose of cairo
- the curious incident of the dog in the night time

结论
希望此演示能帮助您更好地理解两种策略之间的差异及其对搜索结果的影响。与往常一样,您可以在 GitHub 上找到代码。
有许多方法可以微调搜索结果的相关性。这只是众多选项之一。我们知道每个项目都是不同的,都有自己的需求;这就是为什么您的反馈对我们如此重要。我们致力于让您轻松地自定义您的实例,以便您能为用户提供最佳的搜索体验。
不要犹豫,查看我们的 产品仓库 并提出建议或加入有关改进产品的现有讨论。
如果您喜欢 Meilisearch 并想支持我们,在 GitHub 上加一颗星将不胜感激 😇