v1.3 版本有哪些新功能?
v1.3 引入了许多令人兴奋的功能,包括向量搜索、排名分数详情、搜索 facets 值以及查询时的可搜索字段。

让我们来看看 Meilisearch 最新更新中的一些最重大变化。我们将在本文中介绍主要更改,但您也可以在 GitHub 上查看完整的更新日志。
v1.3 现已在 Meilisearch Cloud 上提供,包括所有实验性功能。一键升级您的 Meilisearch 实例,无需停机。
实验性功能:向量搜索
正在使用 LangChain 吗?您现在可以使用 Meilisearch 向量存储,从强大的搜索功能中获益!
我们很高兴推出向量存储!现在,您可以使用向量嵌入(数据的数值表示)索引和搜索文档。对于此功能的首次迭代,您需要使用外部工具(例如 Hugging Face、Cohere 或 OpenAI)来创建此类嵌入。查看[公告帖子](/blog/vector-search-announcement/),了解此功能的广泛可能性和潜在应用。
此功能为实验性功能,您可以使用新的 experimental-features 端点启用它。
要根据文档的向量邻近度搜索文档,请确保它们包含 _vectors
字段
curl -X POST -H 'content-type: application/json' 'localhost:7700/indexes/songs/documents' --data-binary '[ { "id": 0, "_vectors": [0, 0.8, -0.2], "title": "Across The Universe" }, { "id": 1, "_vectors": [1, -0.2, 0], "title": "All Things Must Pass" }, { "id": 2, "_vectors": [[0.5, 3, 1], [-0.2, 4, 6]], "title": "And Your Bird Can Sing" } ]'
存储后,您可以使用新的 vector
搜索参数,结合 search 和 multi-search 路由,搜索您的向量化文档。
curl -X POST -H 'content-type: application/json' 'localhost:7700/indexes/songs/search' --data-binary '{ "vector": [0, 1, 2] }'
👉 请注意,您需要在查询中使用第三方工具生成向量。
返回的文档包含 _semanticScore
字段,指示每个文档与查询的语义相似性或相关性。
{ "hits": [ { "id": 0, "_vectors": [0, 0.8, -0.2], "title": "Across The Universe", "_semanticScore": 0.6754 }, { "id": 1, "_vectors": [1, -0.2, 0], "title": "All Things Must Pass", "_semanticScore": 0.7546 }, { "id": 2, "_vectors": [[0.5, 3, 1], [-0.2, 4, 6]], "title": "And Your Bird Can Sing", "_semanticScore": 0.78 } ], "query": "", "vector": [0, 1, 2], "processingTimeMs": 0, "limit": 20, "offset": 0, "estimatedTotalHits": 2 }
此功能为实验性功能,我们需要您的帮助来改进它!在 此 GitHub 讨论中分享反馈。
新功能:在搜索时显示排名分数
使用新的 showRankingScore
搜索参数,查看每个文档的相关性排名分数
curl -X POST 'https://#:7700/indexes/movies/search' -H 'Content-Type: application/json' --data-binary '{ "q": "Batman Returns", "showRankingScore": true }'
响应中的每个文档都将包含 _rankingScore
属性,表示 0 到 1 之间的分数
"_rankingScore": 0.8575757575757575,
_rankingScore
越高,文档的相关性越高。
实验性功能:排名分数详情
对于返回的每个文档,Meilisearch 都提供了每个排名规则的排名分数详情。此功能是[社区参与如何丰富 Meilisearch 设计过程](/blog/from-ranking-to-scoring/)的完美示例。
此功能为实验性功能,您可以使用新的 experimental-features 端点启用它。
将 showRankingScoreDetails
搜索参数设置为 true
以查看排名分数详情
curl -X POST 'https://#:7700/indexes/movies/search' -H 'Content-Type: application/json' --data-binary '{ "q": "Batman Returns", "showRankingScoreDetails": true }'
响应应包含每个规则的相关性分数
"_rankingScoreDetails": { "words": { "order": 0, "matchingWords": 1, "maxMatchingWords": 1, "score": 1.0 }, "typo": { "order": 1, "typoCount": 0, "maxTypoCount": 1, "score": 1.0 }, "proximity": { "order": 2, "score": 1.0 }, "attribute": { "order": 3, "attributesRankingOrder": 0.8, "attributesQueryWordOrder": 0.6363636363636364, "score": 0.7272727272727273 }, "exactness": { "order": 4, "matchType": "noExactMatch", "score": 0.3333333333333333 } }
此功能为实验性功能。您可以在 此 GitHub 讨论中分享您的反馈,帮助我们改进它。
新功能:搜索 facet 值
定义可过滤属性后,您可以使用新的端点 POST /indexes/{index}/facet-search
来搜索 facet 值。
curl -X POST 'https://#:7700/indexes/movies/facet-search' -H 'Content-Type: application/json' --data-binary '{ "facetName": "genres", "facetQuery": "a" }'
由于 facet 搜索具有拼写容错能力并支持前缀搜索,因此上述查询将返回以下结果
{ "facetHits": [ { "value": "Action", "count": 5403 }, { "value": "Adventure", "count": 3020 }, { "value": "Animation", "count": 1969 } ], "facetQuery": "a", "processingTimeMs": 0 }
要测试此功能,请查看我们更新的 电商演示。
新功能:按计数对 facet 值进行排序
默认情况下,facet 按升序字母数字顺序排序。现在,您可以根据包含每个 facet 值的匹配文档数量,以降序对 facet 值进行排序。
要按计数对 facet 进行排序,您可以使用 faceting 索引设置中的新 sortFacetValuesBy
属性。
要修改所有 facet 的顺序,您可以使用星号 (*) 通配符
curl -X PATCH 'https://#:7700/indexes/movies/settings/faceting -H 'Content-Type: application/json' --data-binary '{ "sortFacetValuesBy": {"*": "count"} }'
或者,您可以灵活地按计数对单个 facet 进行排序,同时保持其他属性的字母数字排序
curl -X PATCH 'http://#:7700/indexes/movies/settings/faceting -H 'Content-Type: application/json' --data-binary '{ "sortFacetValuesBy": {"*": "alpha", "genre": "count"} }'
您也可以在电商演示中尝试它。
新功能:查询时的可搜索属性
借助新的 attributesToSearchOn
搜索参数,您现在可以在查询时将搜索限制为 可搜索属性的子集。它接受一个字符串数组,指示一个或多个文档属性
{ "q": "adventure", "attributesToSearchOn": ["genre"] }
给定以下文档,上述查询将仅返回 id 为 1 的文档。
{ "id": 0, "name": "An Adventure in Space and Time", "genre": ["drama"] }, { "id": 1, "name": "A Strange and Stubborn Endurance", "genre": ["adventure"] }
相关性更改:属性排名规则
在 v1.3 中,与查询词语在其查询中的位置距离较远的文档相比,属性排名规则为查询词语在其查询中的位置更近的文档分配更高的相关性。
以前,此规则根据词语在属性中的位置而不是在搜索查询中的位置来衡量相关性。属性开头包含查询词语的文档被认为更相关。
考虑以下查询:“Batman the dark knight returns”和相应的文档
{ "id": 0, "title": "Batman the dark knight returns" }, { "id": 1, "title": "Dark the Batman knight returns" }, { "id": 2, "title": "Batman returns: a retrospective", "description": "The Dark knight is analyzed in this new Batman documentary" }
在 1.3 版本之前,属性排名规则将文档 2 放在列表顶部,其次是文档 0 和文档 1,并列排名。
自 1.3 版本以来,顺序严格为:文档 0、文档 1、文档 2,这提供了更自然的排名。
其他改进
/tasks
路由现在使用total
属性显示队列中任务的总数。它还显示基于特定过滤器的任务总数- 增强了日语支持和分词
- 改进了 Prometheus
/metrics
实验性功能
贡献者
我们非常感谢所有参与此版本发布的社区成员。我们要感谢:@vvv、@jirutka、@gentcys、@cuishuang、@0xflotus 和 @roy9495 对 Meilisearch 的帮助。
我们还要特别向我们的 Meilistar @mosuka 致以特别的敬意,感谢他对 Charabia 的持续日语改进。
结论
v1.3 的内容就是这些!请记住查看更新日志以获取完整的发行说明,我们下次再见!
您可以通过订阅我们的新闻通讯来保持关注。要了解有关 Meilisearch 未来并帮助塑造它的更多信息,请查看我们的 路线图并参与我们的产品讨论。
如有任何其他问题,请加入我们在 Discord 上的开发者社区。