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

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

v0.28 版本新特性

本月发布带来了两项出色的新功能:智能裁剪和确定性 API 密钥。API 的稳定性也使我们更接近 v1.0 版本!

2022 年 7 月 11 日阅读时长 6 分钟
Carolina Ferreira
Carolina FerreiraMeilisearch 开发者倡导者@CarolainFG
What's new in v0.28
分享文章

在本文中,我们将探讨 Meilisearch 最新更新中的一些重大变化。此版本为您带来了智能裁剪和确定性 API 密钥等新功能。通过 v0.28,我们稳定了 API,向 v1.0 迈出了第一步 🎉。此次稳定化带来了多项变化。您可以在 GitHub 上阅读完整的更新日志,但本文将重点介绍主要内容。

新功能:智能裁剪

Meilisearch 不再将第一个搜索词匹配视为最佳裁剪位置,而是将裁剪内容围绕最多独特匹配项进行居中,优先考虑彼此靠近并遵循原始查询顺序的词语。Meilisearch 在裁剪时还会考虑上下文,并优先保持句子的完整性。

给定以下字符串:

“一只年轻的大象,它超大的耳朵使它能够飞翔,帮助拯救了一个苦苦挣扎的马戏团,但当马戏团计划一项新业务时,小飞象和他的朋友们发现了其光鲜亮丽表象下的黑暗秘密。”

如果搜索查询是 Dumbo 并且 cropLength5,Meilisearch 现在将返回:

"... 小飞象和他的朋友们发现了..."

而不是:

"...新业务,小飞象和他的..."

新功能:确定性 API 密钥

一个**确定性算法**是指在给定特定输入的情况下,总是产生相同输出,不涉及任何随机性的算法。

您可以通过在创建时指定一个 uid 字段来创建确定性的 key 值。uid 值必须遵循 uuid v4 格式。如果您没有指定任何内容,Meilisearch 会自动为您生成 uid

key 字段的值是通过将主密钥与 uid 进行哈希处理生成的。相同的组合总是会生成相同的 key 值。

这将允许您在不同的 Meilisearch 实例中拥有相同的 API 密钥集。此后,在升级或重新部署 Meilisearch 实例时,您将能够保留您的 API 密钥。

由于这些修改,从旧版 Meilisearch 导入的密钥将重新生成其 keyuid 字段。在更新您的 Meilisearch 实例时,**您需要更新您的密钥**。

我们还添加了一个 name 字段,以便更方便地检索 API 密钥。密钥对象现在应如下所示:

{
    "name": null,
    "description": "Manage documents: Products/Reviews API key",
    "key": "d0552b41536279a0ad88bd595327b96f01176a60c2243e906c52ac02375f9bc4",
    "uid": "6062abda-a5aa-4414-ac91-ecd7944c0f8d",
    "actions": [
        "documents.add",
        "documents.delete"
    ],
    "indexes": [
        "products",
        "reviews"
    ],
    "expiresAt": "2021-12-31T23:59:59Z",
    "createdAt": "2021-10-12T00:00:00Z",
    "updatedAt": "2021-10-13T15:00:00Z"
}

关于 API 密钥管理的其他更改包括:

  • 能够通过 keyuid 字段检索、更新和删除密钥。
  • 引入新的 API 密钥管理操作(keys.getkeys.createkeys.updatekeys.delete
  • 出于安全原因,删除了在创建 API 密钥后更新其 actionsindexesexpiresAt 属性的可能性。

重大变更:搜索命名约定

我们正在向 v1 版本迈进,这意味着要定义一个稳定的 API。为了提高清晰度,我们对 /indexes/{uid}/search 端点中一些搜索参数和响应字段的命名进行了更改。

以前称为 facetsDistributionmatches 的搜索参数现在分别称为 facetsshowMatchesPosition

使用这些参数时返回的响应字段现在是 facetDistribution 而不是 facetsDistribution — 请注意 s 的删除 — 以及 _matchesPosition 而不是 _matchesInfo

响应字段 nbHits 已重命名为 estimatedTotalHits。此值曾经常用于计算搜索结果页数,我们强烈建议不要这样做。要了解如何在不使用 nbHits 的情况下使用 Meilisearch 进行分页,请查看这篇全新指南

对于以下查询:

curl 
  -X POST 'https://:7700/indexes/movies/search' 
  -H 'Content-Type: application/json' 
  --data-binary '{
    "q": "Shazam",
    "facets: ["genres"],
    "showMatchesPosition": true
  }'

您将得到以下响应:


{
  "hits": [
    {
      "id": "287947",
      "title": "Shazam!",
      "poster": "https://image.tmdb.org/t/p/w500/xnopI5Xtky18MPhK40cZAGAOVeV.jpg",
      "overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.",
      "release_date": 1553299200,
      "genres": [
        "Action",
        "Comedy",
        "Fantasy"
      ],
      "_matchesPosition": {
        "title": [
          {
            "start": 0,
            "length": 6
          }
        ]
      }
    },
    ...
  ],
  "estimatedTotalHits": 3,
  "query": "Shazam",
  "limit": 20,
  "offset": 0,
  "processingTimeMs": 4,
  "facetDistribution": {
    "genres": {
      "Action": 3,
      "Animation": 2,
      "Comedy": 1,
      "Fantasy": 1
    }
  }
}
 

重大变更:任务管理

浏览任务

我们为 /tasks 端点添加了新的分页系统。

通过此更改,浏览任务变得更加容易,因为在具有大量异步操作的实例中,任务数量会迅速增长。

每次调用此端点时,响应将返回以下字段:

  • limit:返回的任务数量(默认为 20)
  • from:返回的第一个任务的 uid
  • next:下一个任务的 uid

要查看下一页结果,您需要重复相同的查询,将 from 的值替换为 next 的值。当 next 的值为 null 时,表示没有更多任务可供查看。

这种分页系统称为“keyset 分页”。与用于浏览索引、文档和密钥的偏移分页不同,它有两个主要优点:它可以防止任何不一致性,并且由于无需扫描和计数记录,效率更高,这在任务队列快速增长时是一个显著优势。

筛选任务

我们还使任务列表可筛选。您现在可以按 statustypeindexUid 获取任务。

例如,以下命令返回属于索引电影且已成功的任务:

curl -X GET 'https://:7700/tasks?indexUid=movies&status=succeeded'

这些修改导致 GET /indexes/:indexUid/tasksGET /indexes/:indexUid/tasks/:taskUid 端点被删除。

重大变更:数据转储

数据转储创建一直是一个异步操作,但它使用了独立于任务队列的单独队列。在 v0.28 中,数据转储已成为任务。这导致了一种新的任务类型,称为 dumpCreation

尽管数据转储是任务,因此共享同一队列,但**数据转储具有优先权**。它们将在当前任务运行完成后立即处理。您可以将数据转储视为俱乐部中的 VIP;即使它们是最后到达的(这体现在它们的 taskUid 中),它们也可以跳过排队。

通过 GIPHY

贡献者体验

我们一直在努力改善分词器 charabia 的贡献体验。分词器的作用是将句子或短语拆分成更小的语言单元,称为 token。它是搜索结果质量的关键因素。现在,向 Meilisearch 添加语言变得容易得多。您只需遵循 CONTRIBUTING.md 上的说明即可。

Meilisearch 可以完美地处理任何以空格分隔的语言,并对日语和中文提供特殊支持。感谢我们出色的社区,**我们现在也支持希伯来语**!其他语言仍然可以使用,但搜索结果的质量和相关性可能会有显著差异。

我们很乐意提供全球语言支持。我们从母语使用者那里获得的反馈越多,就越容易理解如何改进这些语言的性能。如果您想帮助我们支持您的语言,我们很期待您的来信,并看看我们如何共同进步!

其他更改

  • 我们已在 GET /indexesGET /keys 端点的响应中添加了分页,并改进了 GET /indexes/{uid}/documents 的分页。
  • 出于性能原因,我们决定限制每个分面属性返回的分面值的数量。此限制可自定义,默认为 100。
  • 您可以自定义 Meilisearch 在搜索时返回的文档数量。默认限制为 1000,可防止恶意爬取数据库。请注意,增加此限制可能会影响性能。

对于所有这些更改可能造成的不便,我们深表歉意。这是为了一个好理由:我们现在进行这些更改是为了向 v1.0 迈进,并避免日后出现重大更改。如果您需要支持或有任何疑问,请随时联系我们。我们总是乐于帮助!

贡献者

我们非常感谢这个了不起的社区。我们要感谢 @0x0x1@choznerol@pierre-l@ryanrussell@Thearas@walterbm 对 Meilisearch 的帮助,以及 @matthias-wrightmilli 的帮助。我们想特别感谢 @benny-n 将希伯来语添加到我们的分词器

v0.28 的内容就是这些了!请记住查看 更新日志 以获取完整的发布说明,下次再见!

‌‌

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.