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

v1.3 现已在Meilisearch 云 上提供,包括所有实验性功能。一键升级您的 Meilisearch 实例,无需停机。

🚀
使用 LangChain?您现在可以使用Meilisearch 向量存储 来享受强大的搜索功能的好处!

我们很高兴推出向量存储!现在,您可以使用向量嵌入(数据的数字表示)来索引和搜索文档。对于此功能的首次迭代,您需要使用Hugging FaceCohereOpenAI 等外部工具来创建此类嵌入。查看公告帖子 以了解此功能的广泛可能性和潜在应用。

💡
此功能处于实验阶段,您可以使用新的实验性功能端点 来启用它。

要根据文档的向量邻近度搜索文档,请确保它们包含一个 _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 'http://localhost: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 设计流程 的完美例证。

💡
此功能处于实验阶段,您可以使用新的实验性功能端点 来启用它。

showRankingScoreDetails 搜索参数设置为 true 以查看排名得分详细信息。

curl \
  -X POST 'http://localhost: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 'http://localhost: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 'http://localhost:7700/indexes/movies/settings/faceting \
  -H 'Content-Type: application/json'  \
  --data-binary '{
    "sortFacetValuesBy": {"*": "count"}
  }'

或者,您可以灵活地按计数对单个分面进行排序,同时保持其他属性的字母数字排序。

 curl \
  -X PATCH 'http://localhost: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 上的开发者社区。