想要更好地控制您的搜索设置?了解我们的灵活的基础设施定价

回到主页Meilisearch 的标志
返回文章

v0.29 有什么新功能?

本月发布了备受期待的新功能:匹配策略自定义。同时,索引速度、过滤器和密钥管理方面也得到了许多改进。

2022年10月3日阅读时长5分钟
Carolina Ferreira
Carolina FerreiraMeilisearch开发者倡导者@CarolainFG
What’s new in v0.29

本文介绍了 Meilisearch 最新版本的一些主要变化。更多详细信息,请阅读 GitHub 上的完整更新日志

新功能:匹配策略

v0.29 引入了一个新的搜索参数:matchingStrategy。此参数允许您在搜索时定义 Meilisearch 如何匹配查询词语。

  • last:首先返回包含所有查询词语的文档。然后通过减少匹配中存在的查询词语数量来检索其他结果:Meilisearch 将一次删除一个查询词语,从查询的末尾开始,并将任何新的匹配项添加到结果列表中。这是 v0.21 以来的行为,并将保持为默认策略。
  • all:仅返回包含所有查询词语的文档。

示例

curl \
  -X POST '<https://:7700/indexes/movies/search>' \
  -H 'Content-Type: application/json' \
  --data-binary '{ "q": "american ninja", "matchingStrategy": "all" }'

通过上述请求,Meilisearch 将只返回同时包含“美国”和“忍者”的文档。

我们希望这个新功能能够鼓励那些仍在使用 v0.20(Meilisearch 默认使用 all 匹配策略的最后一个官方版本)的用户更新到我们最新的版本,并受益于此后引入的新功能:排序地理搜索精细 API 密钥权限等等!如果您仍在使用 v0.20,并且暂时不打算升级,我们很乐意了解是什么阻碍了您。

您可以通过匹配策略演示测试此功能,并在专门的博客文章中了解更多关于它的信息。改进:索引性能

我们已经加快了索引速度,特别是以下操作

  • 分面索引:我们修改了算法,以提高可筛选属性的索引速度。
  • 文档删除和更新
  • 我们引入了**软删除**。这是一种技术,通过使用标记将数据标记为已删除,使其对所有用户不可访问,而无需实际从数据库中删除。文档稍后在占用设备空间过多之前被删除。因此,在磁盘上删除记录所需的时间被推迟,并且不会延迟索引过程。
  • 在重新索引时,Meilisearch 现在会检测是否存在完全相同版本的文档,如果存在,则不再对其进行索引。

行为变更:自动批处理

在 v0.26 中,我们引入了一个实验性功能:自动批处理。当激活时,自动批处理会自动合并连续的文档添加请求,显著加快索引过程。

我们很高兴地宣布,自动批处理现在是默认的索引行为,不再是实验性功能 🥳

这意味着您不再需要使用 **--enable-auto-batching** CLI 标志来启用它。现在使用 --enable-auto-batching 将抛出以下错误:

error: Found argument '--enable-auto-batching' which wasn't expected, or isn't valid in this context

	Did you mean '--disable-auto-batching'?

	If you tried to supply `--enable-auto-batching` as a value rather than a flag, use `-- --enable-auto-batching`

USAGE:
    meilisearch --disable-auto-batching

以下自动批处理自定义选项也已移除,如果使用将抛出错误,因此在升级到 v0.29 之前,请确保您的应用程序未使用其中任何一个。

  • --debounce-duration-sec
  • --max-batch-size
  • --max-documents-per-batch

如果您还没有激活自动批处理功能,那么您无需做任何事情,只需享受提升的索引速度 🏎️

🧐 您可能已经在上面的错误消息中注意到:如果出于某种原因您不希望 Meilisearch 自动批处理请求,可以使用一个新的 CLI 标志来停用此功能:--disable-auto-batching

我们正在不断努力改进我们的搜索引擎,您的反馈至关重要。如果您在文档索引速度方面遇到任何问题,如果您能在此讨论中告知我们,我们将不胜感激。

改进:筛选器

我们增加了两个新的筛选器操作符:INEXISTS

  • IN 运算符选择指定字段包含至少一个给定值的所有文档。
  • EXISTS 运算符检查字段是否存在。请注意,空值或 null 值的字段仍被视为存在。

给定以下书籍数据集

[
  { "id": 1, "title": "Pride and Prejudice", "genres": ["romance"] },
  { "id": 2, "title": "Le Petit Prince", "genres": [] },
  { "id": 3, "title": "Alice In Wonderland" },
  { "id": 4, "title": "The Hobbit", "genres": ["adventure", "fantasy"] },
  { "id": 5, "title": "A Game of Thrones", "genres": ["fantasy"] },
]

表达式 genres IN [fantasy, adventure] 将返回文档 45

表达式 genres EXISTS 将返回文档 1245

这两个运算符都可以与 NOT (!=) 运算符结合使用。

行为变更:**!= (NOT) 筛选操作符**

!= (NOT) 筛选操作符返回不满足条件的文档。

考虑到以下文档

{ "id": 1, "product": "T-shirt", "price": 20 }
{ "id": 2, "product": "T-shirt" }
{ "id": 3, "product": "T-shirt", "price": 30 }

NOT price = 20 应该返回所有价格属性不等于 20 的文档。

在 v0.29 中,!= (NOT) 筛选器匹配缺少指定属性的文档。在上述示例中,这意味着 Meilisearch 返回文档 23

在 v0.29 之前,Meilisearch 不会包含缺少 price 属性的结果。在上述示例中,v0.28 只会返回文档 3

您可以通过将 != (NOT) 运算符与新的 EXISTS 运算符结合使用,确保筛选器只返回包含指定属性的文档:price EXISTS AND price != 20 将只返回文档 3

改进:密钥管理

在管理密钥时,在 actions 数组中使用 * 通配符可以访问所有端点。

{
      "name": "Default Admin API Key",
      "description": "Use it for anything that is not a search operation. Caution! Do not expose it on a public frontend",
      "key": "380689dd379232519a54d15935750cc7625620a2ea2fc06907cb40ba5b421b6f",
      "uid": "20f7e4c4-612c-4dd1-b783-7934cc038213",
      "actions": ["*"],
      "indexes": ["*"],
      "expiresAt": null,
      "createdAt": "2021-08-11T10:00:00Z",
      "updatedAt": "2021-08-11T10:00:00Z"
 }

现在,多亏了我们的贡献者,它也可以用作通配符,表示单个特定路由的所有端点 🙌

您无需列出每个单独的端点,只需将 * 字符附加到所需路由即可。例如,documents.* 授权访问所有与文档相关的端点。

改进:泰语支持

我们尊敬的贡献者 @aFluffyHotdog 引入了对泰语的优化支持 🥳

我们一直在寻找方法,让 Meilisearch 的语言支持变得更好。我们从母语使用者那里获得的反馈越多,我们就越容易理解如何提高这些语言的性能和搜索相关性。

想帮助我们支持您的语言吗?贡献!如果您需要指导或帮助,请不要犹豫联系我们;我们期待与您合作!

贡献者

没有我们社区的支持,Meilisearch 不会像今天这样存在。你们真的很棒,我们对你们为 Meilisearch 付出的所有努力、建议、评论和时间感激不尽。本月,我们要特别感谢 @evpeople@Mcdostone@pavo-tusker@phdavis1027@ryanrussell@VasiliySoldatkinMeilisearch 的帮助;@GraDKhMilli 的帮助;以及 @aFluffyHotdog@matthias-wright@mosuka 对我们的分词器 Charabia 的帮助。

就这些了,各位!记得查看更新日志以获取完整的发布说明,下次再见!

Meilisearch 1.16

Meilisearch 1.16

Meilisearch 1.16 引入了多模态嵌入和新的 API,用于在实例之间传输数据。

Laurent Cazanove
Laurent Cazanove2025年8月5日
Meilisearch 1.15

Meilisearch 1.15

Meilisearch 1.15 引入了新的拼写容错设置、字符串过滤器比较运算符,并改进了对中文的支持。

Carolina Ferreira
Carolina Ferreira2025年6月10日
Meilisearch 1.14

Meilisearch 1.14

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

Carolina Ferreira
Carolina Ferreira2025年4月14日
© . This site is unofficial and not affiliated with Meilisearch.