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

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

Meilisearch 1.9

Meilisearch 1.9 带来了相似文档、排序分数阈值、按属性分组以及改进的 AI 搜索功能。

2024年7月2日4分钟阅读
Laurent Cazanove
Laurent Cazanove开发者体验工程师@StriftCodes
Meilisearch 1.9

我们很高兴推出 Meilisearch v1.9。在本文中,我们将回顾最具影响力的更改。如需完整列表,请查看 GitHub 上的更新日志

Meilisearch 1.9 也可在 Meilisearch Cloud 上使用——立即升级!

新功能:排名分数阈值

Meilisearch 1.9 允许排除排名分数较低的搜索结果。使用新的 rankingScoreThreshold 选项时,Meilisearch 将不会返回低于指定阈值的任何文档。

curl 
 -X POST 'https://:7700/indexes/movies/search' 
 -H 'Content-Type: application/json' 
 --data-binary '{
    "q": "green ogre living in a swamp",
    "hybrid": { 
	    "semanticRatio": 0.9, 
	    "embedder": "default" 
	},
    "showRankingScore": true,
    "limit": 5,
    "rankingScoreThreshold": 0.2
 }'

在实现混合搜索时使用排名分数阈值可以消除不相关的结果,并允许您的搜索分析正确收集“无搜索结果”指标。

被排除的结果不计入 estimatedTotalHitstotalHits 或分面分布。

新功能:搜索时唯一属性(分组)

Meilisearch 1.9 增加了在搜索时定义唯一属性的功能。使用新的 distinct 搜索参数时,Meilisearch 将只返回一个具有指定属性值的文档。

此功能通常用于电子商务应用程序。考虑一个 products 索引,其中包含同一产品的多个变体,例如 蓝色 iPhone 15红色 iPhone 15 文档,它们共享相同的 product_id。下面的 API 调用将返回*单个* iPhone 15。

curl 
 -X POST 'https://:7700/indexes/products/search' 
 -H 'Content-Type: application/json' 
 --data-binary '{
    "q": "iphone",
    "distinct": "product_id"
 }'

当提供 distinct 时,Meilisearch 会忽略索引的唯一属性

新功能:frequency 匹配策略

Meilisearch 1.9 引入了一种新的匹配策略,用于优先处理包含最不常见查询词的文档。当使用 frequency 匹配策略时,Meilisearch 将降低非常常见词语的优先级。

以查询 "小王子" 为例。在我们的索引文档中,词语 "的""小" 很可能出现很多次。因此,匹配策略将优先处理包含 "王子" 的文档。

实验性:新的相似文档 API

Meilisearch 1.9 引入了一个新的人工智能搜索功能,允许搜索与现有文档相似的文档。

以下 API 调用搜索在电影索引中,其主键23 的相似文档

curl 
  -X POST /indexes/movies/similar
  -H 'Content-Type: application/json' 
  --data-binary '{
    "id": "23",
    "embedder": "default",
  }'

有关更多附加参数的信息,请查看相似文档 API

实验性:避免重新生成嵌入

当导入使用 Meilisearch 1.9 或更高版本创建的转储时,Meilisearch 将不会重新生成嵌入。这将避免在升级 Meilisearch 数据库时进行不必要的计算。

新功能:regenerate 参数

此外,Meilisearch 1.9 引入了一个新的 API,可以更精细地控制文档嵌入生成。具体来说,它在文档更新时启用嵌入生成。

文档 _vectors 对象现在除了数组外,还接受对象。提供的对象接受一个 regenerate 布尔值和一个可选的 embeddings 数组。

请考虑以下带有用户提供的嵌入的示例文档

{
	"id": 42,
	"_vectors": {
		// Embeddings for the `default` embedder
		// Equivalent to `regenerate: true`
		"default": [0.1, 0.2 ],
		// Embeddings for the `text` embedder
		"text": {
			"embeddings": [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]],
			// Never regenerate embeddings
			"regenerate": false
		},
		"translation": {
			"embeddings": [0.1, 0.2, 0.3, 0.4],
			// Regenerate embeddings when document is updated
			"regenerate": true
		}
	}
}

虽然通常情况下,您可能希望在文档更新时重新生成嵌入,但这有助于从用户提供的嵌入迁移到让 Meilisearch 处理嵌入,而不会产生不必要的成本。

实验性:混合搜索重大变更

随着我们迈向稳定 AI 搜索功能,我们引入了一些细微的突破性更改,以使 API 更不易出错。

突破性变更:空 embeddings 数组

根据用户反馈,之前的行为出乎意料且无益,现在提供一个空的 embeddings 数组将告诉 Meilisearch 该文档没有嵌入。

在 Meilisearch 1.9 之前,一个空的 embeddings 数组被解释为维度为 0 的单个嵌入。

突破性变更:搜索结果中移除 _vectors

从 Meilisearch 1.9 开始,对向量搜索和混合搜索请求的 API 响应将不再包含 _vectors

但是,如果您希望 API 响应包含它们,现在可以使用新的 retrieveVectors 搜索参数

curl 
  -X POST 'https://:7700/indexes/movies/search' 
  -H 'Content-Type: application/json' 
  --data-binary '{
    "q": "star wars",
    "retrieveVectors": true
  }'

突破性变更:优化用户提供的 embeddings

从 Meilisearch 1.9 开始,向量嵌入将不再按原样存储。数字将被转换为规范化表示的浮点数,以节省存储并优化性能。简单来说,向量 [3] 可能会存储为 [3.0]

贡献者鸣谢

感谢所有参与本次发布的社区成员。特别鸣谢 @gh2k@writegr@yudrywetMeilisearch 的贡献,以及 @mosuka@Soham1803@tkhshtsh0917Charabia 的贡献。

当然,非常感谢我们的 SDK 维护者,正是因为他们,Meilisearch 才能支持多种语言。特别感谢 @the-sinner@norkunas。🫶


v1.9 的发布到此结束!这篇发布文章重点介绍了最重要的更新。如需详尽列表,请阅读 GitHub 上的更新日志

通过订阅我们的每月新闻通讯,随时了解 Meilisearch 的最新动态。要了解更多关于 Meilisearch 的未来并帮助塑造它,请查看我们的路线图并参与我们的产品讨论

如有其他需求,请加入我们的开发者社区Discord

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.