Meilisearch 1.10
Meilisearch 1.10 引入了联邦搜索和区域设置,并为 AI 驱动搜索的稳定化铺平了道路。

今天我们宣布 Meilisearch v1.10 发布。本文将回顾最具影响力的变更。如需查看完整列表,请访问 GitHub 上的 更新日志。
Meilisearch 1.10 也已在 Meilisearch 云上推出——立即升级!
新增:联邦搜索
我们很高兴地宣布,[联邦搜索](/blog/what-is-federated-search/#release-v1-10&utm_source=blog 终于登陆 Meilisearch。此功能扩展了 多重搜索 API,允许您将多个查询的结果合并到一个统一的响应中。现在您可以搜索不同的索引,并从整个数据集中获取最相关的结果,而不仅仅是每个索引中最相关的结果。
对于需要跨各种资源类型进行搜索的 SaaS 平台,或拥有多样化产品类别的电子商务网站而言,联邦搜索是一项颠覆性功能。
以下是一个针对 联邦搜索请求 的示例 payload,针对 movies
和 comics
索引。
{ "federation": { "offset": 5, "limit": 10 }, "queries": [ { "q": "Batman", "indexUid": "movies" }, { "q": "Batman", "indexUid": "comics" } ] }
在此示例中,联邦搜索响应将如下所示。
{ "hits": [ { "id": 42, "title": "Batman returns", "overview": "..", "_federation": { "indexUid": "movies", "queriesPosition": 0 } }, { "comicsId": "batman-killing-joke", "description": "..", "title": "Batman: the killing joke", "_federation": { "indexUid": "comics", "queriesPosition": 1 } }, ], "processingTimeMs": 0, "limit": 2, "offset": 0, "estimatedTotalHits": 2, "semanticHitCount": 0 }
查询权重
联邦搜索不仅仅是合并结果;它旨在使这些结果更有意义和相关性。借助 查询权重,您可以优先处理某些查询,确保最重要的数据浮现到顶部。
以下示例 payload 在联邦搜索中使用了 查询权重,以提高 boosted
字段为 true
的文档的重要性。
{ "federation": {}, "queries": [ { "q": "iphone case", "indexUid": "products", "filter": "BOOSTED = true", "federationOptions": { "weight": 3.0 } }, { "q": "iphone case", "indexUid": "products" // federationOptions.weight defaults to 1 } ] }
了解更多关于 联邦搜索及其用例
新增:查询和文档的语言设置
默认情况下,Meilisearch 会自动检测文档和查询中使用的语言。这在某些边缘情况下会带来限制。Meilisearch 1.10 引入了新的语言设置,允许用户手动自定义其语言偏好。
有两种方法可以声明搜索中使用的语言:
- 设置查询中使用的语言
- 设置文档字段中使用的语言
设置搜索查询区域
您可以在 搜索参数中定义查询中使用的语言。
使用查询 locales
进行搜索的示例 payload
{ "q": "進撃の巨人", "locales": ["jpn"] }
设置文档属性的区域
您可以通过 索引设置定义数据集中使用的语言。
带有 localizedAttributes
设置的示例 payload
{ "localizedAttributes": [ { "locales": ["jpn"], "attributePatterns": ["*_japanese"] } ] }
Meilisearch 支持所有 ISO-639-2B 区域。
自托管:现在需要 Ubuntu v20
如果您正在自托管 Meilisearch,请注意:Meilisearch 1.10 现在需要 Ubuntu 版本 20。此更新确保与最新功能的兼容性,并保持最佳性能和安全性。我们建议阅读有关 如何升级 Ubuntu 版本的文档。
此更改不影响 Meilisearch 云 用户。
实验性:AI 驱动搜索的用户体验改进
新增:REST API-based embedders 的自定义请求头
Meilisearch 1.10 支持向您的基于 API 的嵌入服务发送自定义请求头。当您的 嵌入器设置 使用 rest
源时,Meilisearch 现在接受一个可选的 headers
对象。这些请求头将被添加到所有发送到嵌入器 API 的请求中。
嵌入器设置的示例 payload
{ "source": "rest", "apiKey": "•••••••••••••••••", "headers": { "Custom-Header": "value" } }
新增:质量改进
此外,我们还进行了一些小的改动,以简化 Meilisearch AI 驱动搜索 API 的使用:
- 嵌入器设置现在接受 OpenAI 嵌入器的
url
参数,以通过代理访问 OpenAI。 - 嵌入器设置现在接受 ollama 嵌入器的
dimensions
参数。 - Meilisearch 现在在响应中包含
_vectors
用于没有向量的文档(仅当retrieveVectors
启用时)。
⚠️ 破坏性变更:基于 REST API 的嵌入器破坏性变更
用于 配置基于 REST API 的嵌入器(例如 OpenAI、Mistral 等)的 API 发展迅速,为避免混淆,我们决定将参数重新组织到专用的 request
和 response
字段中。
实际上,此更改:
- 删除了
query
、inputField
、inputType
、pathToEmbeddings
和embeddingObject
字段 - 添加了
request
和response
字段
请查看以下示例,了解如何迁移到新语法。
之前 — 使用 Meilisearch 1.9
{ "source": "rest", "url": "https://localhost:10006", "query": { "model": "minillm", }, "inputField": ["prompt"], "inputType": "text", "embeddingObject": ["embedding"] }
之后 — 从 Meilisearch 1.10 开始
{ "source": "rest", "url": "https://localhost:10006", "request": { "model": "minillm", "prompt": "{{text}}" }, "response": { "embedding": "{{embedding}}" } }
升级步骤
仅当您使用基于 REST API 的嵌入器时,此过程才是必要的。要升级到 Meilisearch 1.10,请按照以下步骤操作:
- 移除源为
"rest"
的嵌入器 - 像往常一样更新您的 Meilisearch 云项目 或 自托管 Meilisearch 实例。
实验性: CONTAINS
过滤器运算符
Meilisearch 1.10 引入了 CONTAINS
运算符。由于我们正在努力解决一些性能问题,此功能仍处于实验阶段。这个新的过滤器运算符允许检查子字符串是否包含在更大的字符串中。
鉴于文档 { id: 1, name: "Keffir" }
,您可以按如下方式使用过滤器:
name CONTAINS kef
— 搜索将匹配该文档name CONTAINS clifford
— 搜索将不匹配该文档
请记住,所有过滤器都使用小写、标准化的字符串(所有重音符号都已移除)。
请通过此 Github 讨论分享您的反馈。
实验性:使用函数更新文档
Meilisearch 1.10 允许您通过执行Rhai 函数来编辑文档。这使您可以使用过滤器仅更新数据集的一部分。此外,使用函数可以根据文档数据实现动态逻辑。
以下 payload 更新了所有 id
大于 3000 的文档的标题。
{ "filter": "id > 3000", "function": "doc.title = `✨ ${doc.title.to_upper()} ✨`" }
这也支持更复杂的用例,例如 实施衰减排名策略。根据您的需求,您可能会实现一个函数,该函数将由 Cron 作业定期运行,例如以下示例。
{ "context": { "now": 1715423249 }, "function": " // `posted_at` and `now` are Unix Epoch timestamps in seconds // they must be converted to hours. let age_hours = (context.now - doc.posted_at) / 60 / 60; doc.ranking_score = doc.upvotes ** 0.8 / (age_hours + 2) ** 1.8; " }
请通过此 Github 讨论分享您的反馈。
v1.10 的内容就到这里!这些发布说明仅强调了最重要的更新。如需完整列表,请阅读 GitHub 上的 更新日志。
使用 Meilisearch 云轻松升级。
贡献者鸣谢
没有 Meilisearch 和 Charabia 的贡献者 @Karribalu、 @hanbings、 @junhochoi、 @JWSong、 @PeterDaveHello、 @LukasKalbertodt 以及 @phillitrOSU,本次发布将无法实现。
我们还要特别感谢我们的 SDK 维护者,他们努力使 Meilisearch 适用于许多 语言和框架。我们很高兴 @Sherlouk 和 @Ja7ad 加入我们的开源维护者团队。💪
订阅我们的 每月新闻通讯,随时了解 Meilisearch 的最新动态。要了解 Meilisearch 的未来并帮助塑造它,请查看我们的 路线图 并参与我们的 产品讨论。
其他任何问题,请加入我们在 Discord 上的开发者社区。