v0.28 版本的新功能
本月发布的版本为您带来了两个强大的新功能:智能裁剪和确定性 API 密钥。它还通过我们 API 的稳定化,使我们更接近 v1.0!
在本文中,让我们来看看 Meilisearch 最新更新中的一些最重大的变化。此版本为您带来了诸如智能裁剪和确定性 API 密钥等新功能。在 v0.28 版本中,我们稳定了我们的 API,朝着 v1.0 迈出了第一步 🎉 这种稳定带来了多项更改。您可以在 GitHub 上阅读完整的更新日志,但我们将在本文中介绍主要的更改。
新功能:智能裁剪
Meilisearch 不再将第一个搜索词匹配项视为最佳裁剪位置,而是将裁剪中心围绕最大数量的唯一匹配项,优先考虑彼此更接近并遵循原始查询顺序的词。Meilisearch 在裁剪时还会考虑上下文,并优先保持句子的完整性。
给定以下字符串
“一只年轻的大象,它的大耳朵使它能够飞行,帮助拯救了一个陷入困境的马戏团,但当马戏团计划一项新冒险时,小飞象和他的朋友们发现了它闪亮外表下的黑暗秘密。”
如果搜索查询是 Dumbo
且 cropLength
是 5
,Meilisearch 现在将返回
“...小飞象和他的朋友们发现了...”
而不是
“...新冒险,小飞象和他的...”
新功能:确定性 API 密钥
确定性算法是一种算法,在给定特定输入的情况下,始终产生相同的输出,不涉及随机性。
您可以通过在创建时指定 uid
字段来创建确定性的 key
值。uid
值必须遵循 uuid v4 格式。如果您不指定任何内容,Meilisearch 会自动为您生成 uid
。
key
字段的值是通过使用 uid
对主密钥进行哈希处理生成的。相同的组合始终会产生相同的 key
值。
这将允许您在不同的 Meilisearch 实例中拥有相同的 API 密钥集。此后,在升级或重新部署 Meilisearch 实例时,您将能够保留 API 密钥。
由于这些修改,从旧版本的 Meilisearch 导入的密钥将重新生成其 key
和 uid
字段。更新 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 密钥管理的更改包括
- 能够通过
key
或uid
字段检索、更新和删除密钥 - 引入新操作来管理 API 密钥 (
keys.get
,keys.create
,keys.update
,keys.delete
) - 出于安全原因,删除在创建后更新 API 密钥的
actions
、indexes
或expiresAt
属性的可能性
重大更改:搜索命名
我们正在迈向 v1,这意味着定义一个稳定的 API。为了提高清晰度,我们对 /indexes/{uid}/search
端点中的一些搜索参数和响应字段的命名进行了一些更改。
以前称为 facetsDistribution
和 matches
的搜索参数现在分别称为 facets
和 showMatchesPosition
。
使用这些参数返回的响应字段现在是 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
时,表示没有更多任务可查看。
这种分页系统称为键集分页。与用于浏览索引、文档和密钥的偏移分页相比,它具有两个主要优点:它可防止任何不一致,并且由于无需扫描和计数记录,因此效率更高,当您的任务队列快速增长时,这是一个显着的优势。
过滤任务
我们还使任务列表可过滤。您现在可以通过 status
、type
或 indexUid
获取任务。
例如,以下命令返回属于索引 movies 的所有已成功的任务
curl -X GET 'https://127.0.0.1:7700/tasks?indexUid=movies&status=succeeded'
这些修改导致删除了 GET /indexes/:indexUid/tasks
和 GET /indexes/:indexUid/tasks/:taskUid
端点。
重大更改:转储
转储创建一直是一项异步操作,但使用与任务队列分开的队列。在 v0.28 版本中,转储已变为任务。这导致了一种称为 dumpCreation
的新任务类型。
尽管是任务并因此共享相同的队列,但转储被赋予了优先级。它们将在当前任务运行完成后立即处理。您可以将转储视为俱乐部中的 VIP;即使它们最后到达 - 这反映在它们的 taskUid
中 - 它们也可以跳过排队。
贡献者的体验
我们一直在努力改进我们的分词器的贡献体验:charabia。分词器的作用是将句子或短语拆分为较小的语言单位,称为标记。它是搜索结果质量的关键因素。现在,向 Meilisearch 添加语言要容易得多。您只需按照 CONTRIBUTING.md 上的说明进行操作即可。
Meilisearch 可以完美地与任何空格分隔的语言一起使用,并对日语和中文提供特殊支持。现在,我们还支持希伯来语,这要归功于我们出色的社区!其他语言仍然可以使用,但搜索结果的质量和相关性可能会有很大差异。
我们希望提供全球语言支持。我们从母语使用者那里获得的反馈越多,就越容易理解如何提高这些语言的性能。如果您想帮助我们支持您的语言,我们很乐意收到您的来信,并了解我们如何共同取得进展!
其他更改
- 我们已向
GET /indexes
和GET /keys
端点的响应添加了分页,并且改进了GET /indexes/{uid}/documents
的分页 - 出于性能原因,我们决定限制每个分面属性返回的分面值的数量。此限制是可自定义的,默认值为 100
- 您可以自定义 Meilisearch 在搜索时返回的文档数量。默认限制为 1000,以防止恶意抓取数据库。请注意,增加此限制可能会影响性能
对于所有这些更改造成的任何不便,我们在此提前道歉。这是为了一个良好的目标:我们现在进行这些更改是为了迈向 v1.0,并避免以后出现重大更改。如果您需要支持或有任何疑问,请随时与我们联系。我们很乐意提供帮助!
贡献者
我们非常感谢这个了不起的社区。我们要感谢 @0x0x1, @choznerol, @pierre-l, @ryanrussell, @Thearas 和 @walterbm 对 Meilisearch 的帮助,以及 @matthias-wright 对 milli 的帮助。我们要特别感谢 @benny-n 为我们的 tokenizer 添加了希伯来语支持。
这就是 v0.28 的全部内容!请务必查看 更新日志 以获取完整的发行说明,我们下次再见!