我们很高兴宣布发布 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 EMPTYIS NULL 过滤器运算符

此版本为过滤器赋予了新的功能。所以我们想,我们还能走多远?也许如果我们可以以更多方式过滤。我的意思是,难道你不想要更多过滤器来过滤吗?

因此,我们引入了两个新的过滤器运算符:IS EMPTYIS NULLIS EMPTY 与具有空值的现有属性匹配,而 IS NULL 与具有空值的字段匹配。

以下面的文档为例

[
  {
    "id": 0,
    "color": []
  },
  {
    "id": 1,
    "color": null
  },
  {
    "id": 2,
  }
]

新的过滤器运算符的工作原理如下

  • color IS EMPTY:匹配文档 0
  • color IS NULL:匹配文档 1

请注意,IS EMPTYIS 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 处理排名规则的方式,以提高搜索一致性和延迟
  • 地理搜索 排序现在对降序和升序排序都更加高效
  • 由于 charabia 更新,增强了对拉丁语和阿拉伯语的支持

结论

这总结了 Meilisearch v1.2 中最大的变化。有关包括安全更新和错误修复在内的全面审查,请参阅 变更日志

我们已经在准备 Meilisearch 的 1.3 版本。我们已经准备好了三个原型供您使用:搜索面值排序面值 以及 CONTAINS、STARTS WITH 和 ENDS WITH 过滤器运算符。我们渴望听到您的意见,以便完成最后的修饰工作。

如果没有 @cymruu@GregoryConrad@inductor@jirutka@jlucktay@roy9495@Sufflopemeilisearch 的贡献,此次发布将无法实现。这还包括 @akeamc@DrAliRagab@goodhoko@mosukacharabia 的最后一次发布所做的工作,以不断改进语言支持。非常感谢我们很棒的贡献者。🫶

您可以通过订阅我们的 时事通讯 来了解最新消息。要详细了解 Meilisearch 的未来并帮助塑造它,请查看我们的 路线图 并参加我们的 产品讨论

加入 /r/rust 上的讨论。

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

我们在那里见。