AI 驱动的混合搜索正在进行封闭测试。 加入等待列表 以获取早期访问权限!

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

v0.28 版本的新功能

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

Carolina Ferreira
Carolina FerreiraMeilisearch 的开发者倡导者@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.get, keys.create, keys.update, keys.delete)
  • 出于安全原因,删除在创建后更新 API 密钥的 actionsindexesexpiresAt 属性的可能性

重大更改:搜索命名

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

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

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

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

对于以下查询

curl 
  -X POST 'https://127.0.0.1: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 获取任务。

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

curl -X GET 'https://127.0.0.1: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 为我们的 tokenizer 添加了希伯来语支持。

这就是 v0.28 的全部内容!请务必查看 更新日志 以获取完整的发行说明,我们下次再见!

‌‌

Meilisearch 1.12

Meilisearch 1.12

Meilisearch 1.12 带来了显著的索引速度提升,并引入了新的 API 来禁用前缀搜索和分面搜索,以及检索任务批次。

Laurent Cazanove
Laurent Cazanove2024年12月23日
Meilisearch Q4 2024 release wrap-up

Meilisearch 2024 年第四季度发布总结

Meilisearch 第四季度版本包括更快的搜索速度,对 UI 中设置的更多控制以及一个新的区域。

Maya Shin
Maya Shin2024年11月27日
Meilisearch 1.11

Meilisearch 1.11

Meilisearch 1.11 通过包括二进制量化在内的关键改进,推动了 AI 驱动搜索的稳定化。此版本还根据用户反馈增强了联合搜索功能。

Carolina Ferreira
Carolina Ferreira2024年10月29日