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

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

v1.3 有什么新功能?

v1.3 引入了许多激动人心的功能,包括向量搜索、排名分数详情、分面值搜索以及查询时的可搜索字段。

2023年8月1日5分钟阅读
Carolina Ferreira
Carolina FerreiraMeilisearch 开发者布道师@CarolainFG
What’s new in v1.3?
分享文章

让我们来看看Meilisearch最新版本中一些最重要的变化。我们将在这篇文章中介绍主要的变更,但您也可以在GitHub上查看完整更新日志

v1.3 现在已在 Meilisearch Cloud 上可用,包含所有实验性功能。一键升级您的 Meilisearch 实例,无需停机。

使用LangChain?您现在可以使用 Meilisearch 向量存储 来获得强大的搜索功能!

我们很高兴推出 向量存储!现在,您可以使用向量嵌入(数据的数值表示)来索引和搜索文档。对于此功能的第一版,您需要使用外部工具,如 Hugging FaceCohereOpenAI 来创建这些嵌入。请查看 [公告帖子](/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, 和 @roy9495Meilisearch 的帮助。

我们还要特别感谢我们的 Meilistar,@mosuka,感谢他持续为 Charabia 改进日语支持。

结论

v1.3就到此为止了!请记住查看更新日志以获取完整的发布说明,下次再见!

您可以通过订阅我们的 时事通讯 来保持联系。要了解更多关于 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.