
让我们来看看Meilisearch最新版本中一些最重要的变化。我们将在这篇文章中介绍主要的变更,但您也可以在GitHub上查看完整更新日志。
v1.3 现在已在 Meilisearch Cloud 上可用,包含所有实验性功能。一键升级您的 Meilisearch 实例,无需停机。
实验性功能:向量搜索
使用LangChain?您现在可以使用 Meilisearch 向量存储 来获得强大的搜索功能!
我们很高兴推出 向量存储!现在,您可以使用向量嵌入(数据的数值表示)来索引和搜索文档。对于此功能的第一版,您需要使用外部工具,如 Hugging Face、Cohere 或 OpenAI 来创建这些嵌入。请查看 [公告帖子](/blog/vector-search-announcement/),以了解此功能的广泛可能性和潜在应用。
此功能为实验性功能,您可以通过新的 实验功能端点 启用它。
若要根据向量接近度搜索文档,请确保它们包含一个 _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
搜索参数和 搜索 以及 多重搜索 路由来搜索您的向量化文档。
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/) 的一个完美例子。
此功能为实验性功能,您可以通过新的 实验功能端点 启用它。
将 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 讨论 中分享您的反馈来帮助我们改进它。
新功能:搜索分面值
定义完您的 可过滤属性 后,您可以使用新的端点 POST /indexes/{index}/facet-search
来 搜索分面值。
curl -X POST 'https://:7700/indexes/movies/facet-search' -H 'Content-Type: application/json' --data-binary '{ "facetName": "genres", "facetQuery": "a" }'
由于分面搜索支持错别字容忍和前缀搜索,上述查询将返回以下结果:
{ "facetHits": [ { "value": "Action", "count": 5403 }, { "value": "Adventure", "count": 3020 }, { "value": "Animation", "count": 1969 } ], "facetQuery": "a", "processingTimeMs": 0 }
要测试此功能,请查看我们更新的 电商演示。
新功能:按计数排序分面值
默认情况下,分面按字母数字升序排序。现在,您可以根据包含每个分面值的匹配文档数量,以降序排序分面值。
要按计数对分面进行排序,您可以使用 分面索引设置 中的新属性 sortFacetValuesBy
。
要修改所有分面的顺序,可以使用星号 (*) 通配符
curl -X PATCH 'https://:7700/indexes/movies/settings/faceting -H 'Content-Type: application/json' --data-binary '{ "sortFacetValuesBy": {"*": "count"} }'
或者,您可以灵活地按计数对单个分面进行排序,同时保持其他属性的字母数字排序。
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 中,属性排名规则 将查询词在文档中位置更接近其在查询中位置的文档,与查询词在其在查询中位置较远的文档相比,赋予更高的相关性。
以前,此规则根据单词在属性中的位置而不是在搜索查询中的位置来衡量相关性。属性中包含查询词在属性开头部分的文档被认为更相关。
考虑以下查询:“蝙蝠侠:黑暗骑士归来”和相应的文档
{ "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 上。