Elasticsearch:获取同一文档中的每个字段得分

nkcskrwz  于 5个月前  发布在  ElasticSearch
关注(0)|答案(2)|浏览(76)

假设我有一个包含三个字段的文档:namecompanyemail,每个字段都Map到edge-ngram

{
  "name": "John",
  "company": "John's company",
  "email": "[email protected]" 
}

字符串
当搜索“约翰”,我希望能够得到每个领域的得分分别

{
  "query": {
    "bool": {
      "should": [
        { "match": { "name": "john" }},
        { "match": { "company": "john" }},
        { "match": { "email": "john" }}
      ]
    }
  }
}


在这个例子中,每个match子句的得分加在一起,然后除以match子句的数量。那么,无论如何都要获得每个match子句的得分,而不仅仅是整个文档的最终得分?
我认为设置**“explain”:true**也不理想,因为它提供了非常低级的评分细节(效率低下且难以解析)。

fcwjkofz

fcwjkofz1#

我想不出一种方法,你可以做到这一点,而不修改搜索结果。
但是,如果你对每个字段使用不同的提升,你可能会反过来确定每个字段的值。例如,将一个字段提升1,下一个字段提升10,最后一个字段提升100,然后检查最后的数字可能会给予你想要的,但是,被提升100的字段将是唯一重要的。
好奇的应用程序,因为它似乎提高一般可能解决你正在寻找什么。

fdx2calv

fdx2calv2#

Elasticsearch最近增加了在#94564中返回命名查询得分的功能
我们可以使用命名查询来跟踪哪些查询匹配返回的文档,并通过设置名为include_named_queries_score的请求参数来返回每个命名查询的分数,该参数控制是否返回与匹配查询相关联的分数。
最后的查询看起来像这样:

GET /_search?include_named_queries_score
{
  "query": {
    "bool": {
      "should": [
        { "match": { "name": { "query": "john", "_name": "name" } } },
        { "match": { "company": { "query": "john", "_name": "company" } } },
        { "match": { "email": { "query": "john", "_name": "email" } } }
      ]
    }
  }
}

字符串

相关问题