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

🚀
Meilisearch 1.9 也在Meilisearch 云 上可用,立即升级!

新增:排名分数阈值

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或构面分布。

新增:搜索时的 distinct 属性(按组)

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

此功能通常用于电子商务应用程序。 考虑一个products索引,其中包含同一产品的多个变体,例如共享相同product_idBlue iPhone 15Red iPhone 15文档。 下面的 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 会忽略索引的distinct 属性

新增:frequency匹配策略

Meilisearch 1.9 引入了一种新的匹配策略,优先考虑包含最不常见查询词的出现结果。 使用frequency匹配策略时,Meilisearch 会降低非常常见的词的优先级。

"the little prince"查询为例。 在我们的索引文档中,"the""little"这两个词很可能出现很多次。 因此,匹配策略将优先考虑包含"prince"的文档。

实验性:新的相似文档 API

Meilisearch 1.9 引入了一项新的AI 驱动的搜索 功能,允许搜索与现有文档相似的文档。

以下 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 引入了一些小的重大更改,使 API 减少错误。

重大变更:空embeddings数组

根据用户的反馈,之前的行为是不可预期的且没有帮助,现在提供一个空的embeddings数组将告诉 Meilisearch 该文档没有嵌入。

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

重大变更:删除搜索结果中的_vectors

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

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

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 上交流。