Meilisearch v1.14 发布啦 ✨ 在我们的博客上阅读更多

返回首页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 Cloud 上使用——立即升级!

新增:联邦搜索

我们很高兴地宣布,联邦搜索 终于来到 Meilisearch。此功能扩展了 multi-search API,允许您将来自多个查询的结果合并到单个统一的响应中。您现在可以搜索不同的索引,并获得整个数据集中的最相关结果,而不仅仅是每个索引的最相关结果。

对于需要跨各种资源类型进行搜索的 SaaS 平台或具有不同产品类别的电子商务站点,联邦搜索是一个游戏规则改变者。

以下是针对 moviescomics 索引发出 联邦搜索请求 的示例负载

{
  "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
}

查询权重

联邦搜索不仅仅是组合结果;它还旨在使这些结果更具意义和相关性。借助 查询权重,您可以优先考虑某些查询而不是其他查询,从而确保最重要的数据升到顶部。

以下示例负载在联邦搜索中使用查询权重,以更重视 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 进行搜索的示例负载

{
   "q": "進撃の巨人",
   "locales": ["jpn"]
}

设置文档属性的区域设置

您可以通过 索引设置 定义数据集中使用的语言。

使用 localizedAttributes 进行设置的示例负载

{
  "localizedAttributes": [
    {
      "locales": ["jpn"], 
      "attributePatterns": ["*_japanese"]
    }
  ]
}

Meilisearch 支持所有 ISO-639-2B 区域设置。

自托管:现在需要 Ubuntu v20

如果您是自托管 Meilisearch,请注意:Meilisearch 1.10 现在需要 Ubuntu 版本 20。此更新确保与最新功能的兼容性,并保持最佳性能和安全性。我们建议阅读有关 如何升级 Ubuntu 版本 的文档。

此更改不影响 Meilisearch Cloud 用户。

实验性功能:AI 驱动的搜索 DX 改进

新增:REST API 基础嵌入器的自定义标头

Meilisearch 1.10 支持将自定义标头发送到您的 API 基础嵌入服务。当为您的 嵌入器设置 使用 rest 源时,Meilisearch 现在接受可选的 headers 对象。这些标头将添加到发送到嵌入器 API 的所有请求中。

嵌入器设置的示例负载

{
  "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 发展迅速,为了避免混淆,我们决定在专用的 requestresponse 字段中重新组织参数。

实际上,此更改

  • 删除了 queryinputFieldinputTypepathToEmbeddingsembeddingObject 字段
  • 添加了 requestresponse 字段

请查看以下示例,了解如何迁移到新语法。

之前 — 使用 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 Cloud 项目自托管 Meilisearch 实例

实验性功能:CONTAINS 过滤器运算符

Meilisearch 1.10 引入了 CONTAINS 运算符。由于我们正在努力解决一些性能问题,这仍处于实验阶段。这个新的 过滤器运算符 允许检查子字符串是否包含在更大的字符串中。

给定文档 { id: 1, name: "Keffir" },您可以按如下方式使用过滤器

  • name CONTAINS kef — 搜索将匹配该文档
  • name CONTAINS clifford — 搜索将不匹配该文档

请记住,所有过滤器都使用小写、规范化的字符串(所有重音符号都已删除)。

通过此 Github 讨论 分享您的反馈。

实验性功能:使用函数更新文档

Meilisearch 1.10 允许您通过执行 Rhai 函数 来编辑文档。这允许您仅使用过滤器更新部分数据集。此外,使用函数允许您根据文档数据实现动态逻辑。

以下负载更新 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 Cloud 轻松升级。

打开 Meilisearch Cloud


贡献者致谢

如果没有 MeilisearchCharabia 贡献者 @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 日