返回主页Meilisearch 标志
返回文章
2024年8月27日

Meilisearch 1.10

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

Laurent Cazanove
Laurent Cazanove开发者体验工程师StriftCodes
Meilisearch 1.10

今天我们宣布 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,请按照以下步骤操作:

  1. 移除源为 "rest" 的嵌入器
  2. 像往常一样更新您的 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 云


贡献者鸣谢

没有 Meilisearch 和 Charabia 的贡献者 @Karribalu、 @hanbings、 @junhochoi、 @JWSong、 @PeterDaveHello、 @LukasKalbertodt 以及 @phillitrOSU,本次发布将无法实现。

我们还要特别感谢我们的 SDK 维护者,他们努力使 Meilisearch 适用于许多 语言和框架。我们很高兴 @Sherlouk 和 @Ja7ad 加入我们的开源维护者团队。💪


订阅我们的 每月新闻通讯,随时了解 Meilisearch 的最新动态。要了解 Meilisearch 的未来并帮助塑造它,请查看我们的 路线图 并参与我们的 产品讨论

其他任何问题,请加入我们在 Discord 上的开发者社区。

Meilisearch 1.14

Meilisearch 1.14

Meilisearch 1.14 引入了新的实验性功能,包括复合嵌入器和嵌入缓存以提高性能。它还增加了核心功能,例如粒度可过滤属性和按 ID 批量文档检索。

Carolina Ferreira
Carolina Ferreira2025年4月14日
Meilisearch AI launch week recap

Meilisearch AI 发布周回顾

Meilisearch AI 发布回顾:利用 AI 和个性化改造搜索

Maya Shin
Maya Shin2025年3月28日
Introducing Meilisearch's next-generation indexer: 4x faster updates, 30% less storage

推出 Meilisearch 的下一代索引器:更新速度快 4 倍,存储减少 30%

2024 年索引器版本通过并行处理、优化 RAM 使用和增强可观察性彻底改变了搜索性能。查看我们最新版本中的新增功能。

Louis Dureuil
Louis Dureuil2025年2月26日