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 '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
时,表示没有更多任务可查看。
这种分页系统称为键集分页。与用于浏览索引、文档和密钥的偏移分页相反,它有两个主要优点:它可以防止任何不一致,并且由于无需扫描和计数记录,因此效率更高,这在任务队列快速增长时是一个显着的优势。
过滤任务
我们还使任务列表可过滤。您现在可以按 status
、type
或 indexUid
获取任务。
例如,以下命令返回属于索引电影的所有已成功的任务
curl -X GET 'http://localhost: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 将希伯来语添加到我们的 分词器中。
这就是 v0.28 版本的所有内容!请记住查看更新日志以获取完整的发行说明,我们下次再见!