您是否返回了用户想要的搜索结果?
了解如何通过自定义 Meilisearch 的匹配策略来优化搜索结果的相关性。
Meilisearch v0.29 发布了,并带来了新功能:匹配策略自定义!
考虑以下情况:用户发送一个由两个单词组成的搜索请求。当没有足够的文档满足请求的 limit
时会发生什么?引擎是否应该只返回包含所有查询词的文档?还是应该返回更多文档?如果是,它应该应用哪个标准来返回它们?
这就是匹配策略发挥作用的地方。匹配策略用于在引擎未找到足够包含所有查询词的文档时匹配查询词。这不是一个容易的决定,它高度依赖于用户搜索的数据类型。幸运的是,现在您可以在搜索时选择要应用的策略 🎉
一点历史
早在 2021 年,所有 v0.21 之前的版本都只返回所有查询词都存在的文档。所以如果我搜索“Peter Parker”,它只会返回同时包含 “peter” 和 “parker” 这两个词的文档。这种匹配策略称为:all
,因为文档中必须存在所有查询词才能返回。
排名规则是 Meilisearch 确保相关结果的最重要功能之一。words 排名规则如下
结果按匹配的查询词数量递减排序。首先返回包含所有查询词的文档。
该规则已经在我们的文档中存在一段时间,并带有以下警告消息
目前,返回的文档中必须存在所有查询词。因此,此规则尚未影响搜索结果。
在 v0.21 中,words 规则开始生效,因此此警告以及所有查询词都存在的约束消失了。
从那时起,如果没有足够的文档包含所有查询词,Meilisearch 会一次删除一个词,从查询的末尾开始。所以如果我搜索“Peter Parker”,它会先返回包含两个词的文档,然后是只包含 “Peter” 的文档
这种匹配策略称为 last
,因为 Meilisearch 删除查询的最后一个词。
事实证明,许多用户对之前的匹配行为感到非常满意。不幸的是,这种更改不允许他们迁移到较新版本的 Meilisearch,这阻止了他们从它的许多改进中获益:搜索时的排序、地理搜索、精细的 API 密钥权限、多租户等。他们不仅错过了所有这些,他们还将错过所有即将推出的精彩功能! 😱
别慌!0.29 版本已经来拯救你们了!
闭环反馈
现在,可以在搜索时选择所需的匹配策略。默认策略是 last
;如果您想使用 all
,您只需在搜索正文中指定它,如下所示
curl -X POST 'https://127.0.0.1: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 上点亮一颗星对我们意义重大 😇