
我们很高兴地宣布 Meilisearch v1.2 发布。这个次要版本包含过滤器的新功能和全面的引擎改进。让我们深入了解最值得注意的变化!
新功能:通过过滤器增强文档管理
我们很高兴通过引入用于获取和删除文档的过滤器来改善 Meilisearch 开发人员的体验。🥳
与往常使用过滤器一样,文档字段必须首先设置为可过滤属性。
检索文档
过滤器为获取文档带来了新功能。例如,我们可以在执行删除之前检查有多少文档与某些过滤器匹配。
因此,我们引入了一个新的端点来检索文档
**POST** /indexes/{indexUid}/documents/fetch
让我们考虑一个包含电影的索引。我们将编写一个请求来检索 10 部恐怖或悬疑类型的电影。使用数组语法,我们可以在请求正文中表达过滤器,如下所示
{ "filter": [ "genre = Horror", "genre = Mystery" ], "limit": 10 }
这个新端点使您无需进行搜索请求即可探索数据。有关使用过滤器获取文档的更多信息,请阅读专用文档。
删除文档
您现在可以删除与过滤器列表匹配的文档。此功能带有一个专用端点
**POST** /indexes/{indexUid}/documents/delete
以包含电影的索引为例,让我们编写一个请求来删除所有恐怖或喜剧电影,以及詹姆斯·卡梅隆执导的电影。这可以通过以下请求正文表达
{ "filter": [ [ "genre = Horror", "genre = Comedy" ], "director = "James Cameron"" ] }
此请求启动一项任务来删除匹配的文档。Meilisearch 将返回一个摘要任务对象
{ "taskUid": 42, "indexUid": "movies", "status": "enqueued", "type": "documentDeletion", "enqueuedAt": "2023-06-05T11:01:58.721841Z" }
此任务表示异步删除操作。不要忘记检查任务状态以确保文档已删除,然后再继续。有关删除文档的更多信息,请阅读专用文档。
新功能:IS EMPTY
和 IS NULL
过滤器运算符
此版本为过滤器带来了新功能。所以我们想,我们如何才能更进一步?也许我们可以以更多方式进行过滤。我的意思是,您不想在过滤时获得更多过滤器吗?
因此,我们引入了两个新的过滤器运算符:IS EMPTY
和 IS NULL
。IS EMPTY
匹配具有空值的现有属性,而 IS NULL
匹配具有空值的字段。
以下是一个示例,考虑以下文档
[ { "id": 0, "color": [] }, { "id": 1, "color": null }, { "id": 2, } ]
新的过滤器运算符的工作方式如下
color IS EMPTY
:匹配文档0
color IS NULL
:匹配文档1
请注意,IS EMPTY
和 IS NULL
都不会匹配缺少 color
字段的文档。这两个运算符也可以与 NOT
结合使用。有关更多信息,请阅读相关文档。
实验性功能:减少内存使用
我们引入了一个新的实验性标志,以减少 Meilisearch 的 RAM 使用。通过使用 --experimental-reduce-indexing-memory-usage
CLI 标志或 MEILI_EXPERIMENTAL_REDUCE_INDEXING_MEMORY_USAGE
环境变量启动 Meilisearch 来尝试它。
您可以在此 Github 讨论中提供反馈。
改进:相关性
我们增强了拼写容错。拆分的单词现在被视为拼写错误,这意味着 whit ehorse
现在可能匹配包含 white horse
的文档。但是,N-gram 和拆分的单词现在将排名较低。这意味着 sun flower
现在将返回包含 Sun Flower
的文档,而不是包含 Sunflower
的文档。
改进:自动化任务删除
Meilisearch 异步处理诸如将文档添加到索引等操作。这意味着它们不会立即处理。相反,Meilisearch 将它们放入任务队列中,并按接收顺序处理它们。从 v1.2 开始,任务队列的最大容量为 100 万。
一旦队列已满,Meilisearch 将尝试删除最旧的 100,000 个任务。Meilisearch 不会删除**未**完成(已排队或正在处理)的任务。它只会从最旧的 100,000 个任务中删除尽可能多的已完成任务。
当任务的自动删除失败时,Meilisearch 将发出 `warning_` 级别的日志。
其他更改
结论
这总结了 Meilisearch v1.2 中最大的变化。有关包括安全更新和错误修复在内的详尽审查,请查阅更新日志。
我们已经在准备 Meilisearch 的 1.3 版本。我们已经为您准备了三个原型:搜索分面值、排序分面值,以及CONTAINS、STARTS WITH 和 ENDS WITH 过滤器运算符。我们渴望听取您的意见以完成最后的润色。
本次发布离不开 @cymruu、@GregoryConrad、@inductor、@jirutka、@jlucktay、@roy9495 和 @Sufflope 对 meilisearch 的贡献。这还包括 @akeamc、@DrAliRagab、@goodhoko 和 @mosuka 对最新版 charabia 的贡献,以持续改进语言支持。非常感谢我们出色的贡献者。🫶
您可以通过订阅我们的新闻通讯来保持联系。要了解有关 Meilisearch 未来并帮助塑造它,请查看我们的路线图并参与我们的产品讨论。
加入 /r/rust 上的讨论。
如需其他任何内容,请加入我们 Discord 上的开发者社区:Discord。
到时候见。