Meilisearch v1.14 发布啦 ✨ 在我们的博客上阅读更多内容

转到主页Meilisearch 的标志
返回文章
2022 年 7 月 11 日

v0.28 版本的新特性

本月发布的版本为您带来了两个强大的新功能:智能裁剪和确定性 API 密钥。它还通过 API 的稳定化,使我们离 v1.0 更近了一步!

Carolina Ferreira
Carolina Ferreira开发者布道师 @ Meilisearch@CarolainFG
What's new in v0.28

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

新功能:智能裁剪

Meilisearch 不再将第一个搜索词匹配项视为最佳裁剪位置,而是将裁剪中心放在最大数量的唯一匹配项周围,优先考虑彼此更接近并遵循原始查询顺序的词项。 Meilisearch 在裁剪时还会考虑上下文,并优先保持句子的完整性。

给定以下字符串

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

如果搜索查询是 DumbocropLength5,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 'http://localhost: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 时,表示没有更多任务可查看。

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

过滤任务

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

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

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

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

重大变更:转储

转储创建一直是一项异步操作,但使用与任务队列分开的队列。在 v0.28 版本中,转储已变为任务。这导致了一种名为 dumpCreation 的新任务类型。

尽管转储是任务,因此共享相同的队列,但转储具有优先级。它们将在当前任务运行完成后立即处理。您可以将转储视为俱乐部中的 VIP;即使他们最后到达 - 这反映在他们的 taskUid 中 - 他们也可以插队。

via GIPHY

贡献者体验

我们努力改进了分词器的贡献体验:charabia。分词器的作用是将句子或短语拆分为更小的语言单位,称为标记。它是搜索结果质量的关键因素。现在,向 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.14

Meilisearch 1.14

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

Carolina Ferreira
Carolina Ferreira2025 年 4 月 14 日
Meilisearch AI launch week recap

Meilisearch AI 发布周回顾

Meilisearch AI 发布回顾:通过 AI 和个性化改造搜索

Maya Shin
Maya Shin2025 年 3 月 28 日
Introducing Meilisearch's next-generation indexer: 4x faster updates, 30% less storage

Meilisearch 下一代索引器介绍:更新速度提高 4 倍,存储空间减少 30%

2024 版索引器通过并行处理、优化的 RAM 使用率和增强的可观察性彻底改变了搜索性能。查看我们最新版本中的新功能。

Louis Dureuil
Louis Dureuil2025 年 2 月 26 日