
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
,您只需在搜索正文中按如下方式指定即可:
curl -X POST 'https://: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个词的查询不等
- 阿甘正传
- 大话王
- 重返梦幻岛
- 开罗紫玫瑰
- 夜间狗的奇异事件
结论
我希望这个演示能帮助您更好地理解两种策略之间的差异及其对搜索结果的影响。一如既往,您可以在 GitHub 上找到代码。
有许多方法可以微调搜索结果的相关性。这只是众多可用选项之一。我们知道每个项目都不同,有其自己的要求;这就是为什么您的反馈对我们如此重要。我们致力于让您轻松自定义您的实例,以便您能够为用户提供最佳的搜索体验。
请务必查看我们的产品仓库,提出建议或加入现有讨论,以改进产品。
如果您喜欢 Meilisearch 并想支持我们,在 GitHub 上点亮一颗星对我们意义重大😇