Meilisearch 1.9
Meilisearch 1.9 带来了相似文档、排名分数阈值、按属性分组以及改进的 AI 搜索。
我们很高兴推出 Meilisearch v1.9。在本文中,我们将回顾最具影响力的变化。有关详尽的列表,请查看 GitHub 上的更新日志。
Meilisearch 1.9 也可在 Meilisearch 云端使用 — 立即升级!
新增:排名分数阈值
Meilisearch 1.9 允许排除排名分数较低的搜索结果。当使用新的 rankingScoreThreshold
选项时,Meilisearch 将不会返回任何低于定义阈值的文档。
curl -X POST 'https://127.0.0.1:7700/indexes/movies/search' -H 'Content-Type: application/json' --data-binary '{ "q": "green ogre living in a swamp", "hybrid": { "semanticRatio": 0.9, "embedder": "default" }, "showRankingScore": true, "limit": 5, "rankingScoreThreshold": 0.2 }'
在实现 混合搜索时使用排名分数阈值,可以删除不相关的结果,并允许您的搜索分析正确收集无搜索结果指标。
排除的结果不会计入 estimatedTotalHits
、totalHits
或分面分布中。
新增:搜索时的唯一属性(按分组)
Meilisearch 1.9 增加了在搜索时定义唯一属性的功能。当使用新的 distinct
搜索参数时,Meilisearch 将仅返回一个具有指定属性值的文档。
此功能通常用于电子商务应用程序。考虑一个包含同一产品的多个变体的 products
索引,例如,共享相同 product_id
的 Blue iPhone 15
和 Red iPhone 15
文档。下面的 API 调用将返回单个 iPhone 15。
curl -X POST 'https://127.0.0.1:7700/indexes/products/search' -H 'Content-Type: application/json' --data-binary '{ "q": "iphone", "distinct": "product_id" }'
当提供 distinct
时,Meilisearch 会忽略索引的唯一属性。
新增:frequency
匹配策略
Meilisearch 1.9 引入了一种新的匹配策略,用于优先考虑包含最不常见查询词的结果。当使用 frequency
匹配策略时,Meilisearch 将降低非常常见词语的优先级。
让我们以 "the little prince"
查询为例。在我们的索引文档中,单词 "the"
和 "little"
可能有很多出现次数。因此,匹配策略将优先考虑包含 "prince"
的文档。
实验性:新的相似文档 API
Meilisearch 1.9 引入了一个新的由 AI 驱动的搜索功能,允许搜索与现有文档相似的文档。
以下 API 调用在电影索引中搜索与主键为 23
的文档相似的文档。
curl -X POST /indexes/movies/similar -H 'Content-Type: application/json' --data-binary '{ "id": "23", "embedder": "default", }'
查看相似文档 API,了解有关其他参数的更多信息。
实验性:避免重新生成嵌入
当导入使用 Meilisearch 1.9 或更高版本创建的转储时,Meilisearch 将不会重新生成嵌入。这将在升级 Meilisearch 数据库时避免不必要的计算。
新增:regenerate
参数
此外,Meilisearch 1.9 引入了一个新的 API,以提供对文档嵌入生成的更精细的控制。具体来说,它可以在更新文档时启用嵌入生成。
文档 _vectors
对象现在除了接受数组外,还接受对象。提供的对象接受 regenerate
布尔值和一个可选的 embeddings
数组。
考虑下面带有用户提供的嵌入的示例文档
{ "id": 42, "_vectors": { // Embeddings for the `default` embedder // Equivalent to `regenerate: true` "default": [0.1, 0.2 ], // Embeddings for the `text` embedder "text": { "embeddings": [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]], // Never regenerate embeddings "regenerate": false }, "translation": { "embeddings": [0.1, 0.2, 0.3, 0.4], // Regenerate embeddings when document is updated "regenerate": true } } }
虽然通常情况下,您可能希望在每次更新文档时重新生成嵌入,但这有助于从用户提供的嵌入迁移到让 Meilisearch 处理嵌入,而不会产生不必要的成本。
实验性:混合搜索的重大更改
随着我们朝着稳定由 AI 驱动的搜索功能的方向迈进,我们引入了微小的重大更改,以减少 API 的错误发生率。
重大更改:空的 embeddings
数组
根据用户反馈,以前的行为是意外且无帮助的,现在提供空的 embeddings
数组将告诉 Meilisearch 该文档没有嵌入。
在 Meilisearch 1.9 之前,空的 embeddings
数组被解释为维度为 0 的单个嵌入。
重大更改:删除搜索结果中的 _vectors
从 Meilisearch 1.9 开始,对向量搜索和混合搜索请求的 API 响应将不再在响应中包含 _vectors
。
但是,如果您希望 API 响应包含它们,您现在可以使用新的 retrieveVectors
搜索参数
curl -X POST 'https://127.0.0.1:7700/indexes/movies/search' -H 'Content-Type: application/json' --data-binary '{ "q": "star wars", "retrieveVectors": true }'
重大更改:优化用户提供的 embeddings
从 Meilisearch 1.9 开始,向量嵌入将不再按原样存储。数字将被转换为规范化表示中的浮点数,以节省存储空间并优化性能。简而言之,向量 [3]
可能会存储为 [3.0]
。
贡献者致谢
感谢所有参与此版本的社区成员。特别感谢 @gh2k、@writegr 和 @yudrywet 对 Meilisearch 的贡献,以及 @mosuka、@Soham1803 和 @tkhshtsh0917 对 Charabia 的贡献。
当然,还要非常感谢我们的 SDK 维护人员,感谢他们让 Meilisearch 可以在多种语言中使用。特别感谢 @the-sinner 和 @norkunas。🫶
v1.9 的内容就到此为止!此版本帖子重点介绍了最重要的更新。有关详尽的列表,请阅读 Github 上的更新日志。
订阅我们的每月通讯,随时了解 Meilisearch 的最新动态。要了解更多关于 Meilisearch 的未来并帮助塑造它,请查看我们的路线图并参与我们的产品讨论。
如有其他问题,请加入我们在 Discord 上的开发者社区。