今天标志着 MeiliSearch v0.21 的发布,这是我们自 2021 年 3 月以来的第一个新版本。正如您所料,此版本对我们的搜索引擎进行了许多大大小小的更改。您可以查看我们的 完整的变更日志,其中概述了所有重大更改,并在此处下载二进制文件,但在本文中,我们想更详细地介绍一些最重要的更新。

搜索性能

首先,我们能给你的最好的消息是:v0.21 是迄今为止最快的 MeiliSearch 版本。有多快?我们的测试使用一个 1GB 的数据集,其中包含 1.15 亿个文档,表明复杂查询的返回结果速度比 v0.20 快十倍;过滤这些结果(以前是一个缓慢的操作)最多需要 50 毫秒。

重构

Clémentine 已经写过关于 为什么我们选择重构我们的核心引擎的基本部分,但如果您错过了:对我们来说,保持代码对外部贡献者易于阅读,并在不影响性能的情况下添加新功能变得越来越困难。

我们对我们在这些月里取得的成就感到非常自豪,不仅因为我们设法极大地提高了 MeiliSearch 的性能,而且因为我们知道我们的搜索引擎拥有一个新的、坚如磐石的基础。

方面和过滤器

v0.21 中一些最大的可见(和破坏性的)更改涉及方面和过滤器。

首先,搜索参数 filtersfacetFilters 已被 filter 替换。这个新参数允许您根据其值为数字或字符串的文档属性细化搜索结果。

$ curl 'http://localhost:7700/indexes/movies/search' \
--data '{ "q": "thriller", "filter": ["genres = Horror", "genres = Mystery"]}'
在这个示例中,我们创建了一个过滤器,它只返回被归类为恐怖片和悬疑片的电影。

要使用具有 filter 搜索参数的属性,您必须先将其添加到 新的 filterableAttributes 索引设置filterableAttributes 的工作原理与 attributesForFaceting 索引设置完全相同,并将其替换。

$ curl \
  -X POST 'http://localhost:7700/indexes/movies/settings' \
  --data '{
      "filterableAttributes": [
          "director",
          "genres"
      ]
  }'

MeiliSearch 不再区分方面和过滤器:您可以使用新的 filter 搜索参数和 filterableAttributes 索引设置来创建 faceted search interfaces

MeiliSearch v0.21 支持 短语搜索。如果您将一个或多个搜索词用双引号括起来(例如,“african-american poet”“John Waters”),MeiliSearch 将只返回包含这些词的文档,这些词的顺序和书写方式与您输入的完全相同。短语搜索是使查询更加精确的好方法,当您知道搜索应该只获得一个结果时,它会派上用场,例如当使用 ISBN 号查找书籍时。

$ curl 'http://localhost:7700/indexes/movies/search' \
  --data '{ "q": "\"John\" Waters" }'

Web 界面

如果您不知道,MeiliSearch 在您在开发模式下启动实例时会自动创建一个 Web 界面,以便您可以立即测试我们的搜索引擎。我们更新了此界面,使其更易于使用(并且更美观)!

新的遥测页面和更简单的分析设置

默认情况下,MeiliSearch 从所有使用我们搜索引擎的实例中收集匿名数据。我们已经简化了 禁用此行为 的方法,并且 在我们的文档中添加了一个新页面,解释我们收集哪些数据以及如何使用这些数据。隐私对我们来说是一个重要的问题,因此请随时分享您可能有任何的评论、问题或建议。

$ ./meilisearch --no-analytics=true

突出显示数组和对象字段中的匹配项

MeiliSearch v0.20 允许您 在字符串字段中突出显示匹配的搜索词,以便用户可以看到该词在文档中确切出现在哪里。在 v0.21 中,我们已将此功能扩展到适用于字符串数组和嵌套对象。与之前一样,您可以在每个返回的文档的 _formatted 对象中找到突出显示的匹配项。

$ curl 'http://localhost:7700/indexes/movies/search' \
  --data '{ 
		"q": "adventure", 
    	"attributesToHighlight": ["title", "genres"] 
	}'
{
  "id": "50393",
  "title": "The Adventures of Huck Finn",
  "overview": "Climb aboard for an extraordinary version of Mark Twain's sweeping adventure when Walt Disney presents The Adventures of Huck Finn, starring Elijah Wood.",
  "release_date": 733712400,
  "genres": ["Adventure","Family"]
  "_formatted": {
      "id": "50393",
      "title": "The <em>Adventures</em> of Huck Finn",
      "overview": "Climb aboard for an extraordinary version of Mark Twain's sweeping adventure when Walt Disney presents The Adventures of Huck Finn, starring Elijah Wood.",
      "release_date": 733712400,
      "genres": ["<em>Adventure</em>","Family"]
  }
}
标题和类型突出显示的匹配项在 _formatted 中可用。

其他更改

  • 您可能会注意到索引器中的性能略有提高:这是一个正在进行的工作,我们渴望得到您对此的反馈
  • wordsPosition 排名规则 已合并到 attribute
  • max-mdb-size 已重命名为 max-index-size
  • 现在可以使用人类可读的单位(如 KbGb)指定 max-index-sizehttp-payload-limit-size
  • 我们已删除了每个实例 200 个索引的限制

错误修复

  • Windows 实例不再在启动时立即占用最大索引大小
  • Words 排名规则 现在按预期工作
  • 转储 现在可以正确导出所有文档字段,无论它们是否出现在 displayedAttributes

贡献者

这在很大程度上得益于我们的社区:我们真诚地为您的慷慨而感到谦卑。由于您的存在,MeiliSearch 成为了一个更好的搜索引擎。

我们要特别感谢 @sanders41@bb:你们的错误报告和反馈非常有用!

最后,非常感谢 @shekhirin 对新搜索引擎实施的所有帮助。


关于此版本的介绍就到这里了!要全面了解所有更改(包括重大更改和非重大更改),您可以 查看我们的变更日志