【问题标题】:How Elasticsearch relevance score gets calculated?如何计算 Elasticsearch 相关性分数?
【发布时间】:2017-11-20 13:42:18
【问题描述】:

我在 Elasticsearch 5.5 中使用 multi_matchphrase_prefix 进行全文搜索。 ES 查询看起来像

{
  query: {
    bool: {
      must: {
        multi_match: {
          query: "butt", 
          type: "phrase_prefix", 
          fields: ["item.name", "item.keywords"], 
          max_expansions: 10
        }
      }
    }
  }
}

我收到以下回复

[
  {
    "_index": "items_index",
    "_type": "item",
    "_id": "2",
    "_score": 0.61426216,
    "_source": {
      "item": {
        "keywords": "amul butter, milk, butter milk, flavoured",
        "name": "Flavoured Butter"
       }
     }
   },
   {
     "_index": "items_index",
     "_type": "item",
     "_id": "1",
     "_score": 0.39063013,
     "_source": {
       "item": {
         "keywords": "amul butter, milk, butter milk",
         "name": "Butter Milk"
       }
     }
   }
 ]

映射如下(我使用的是默认映射)

 {
   "items_index" : {
     "mappings" : {
       "parent_doc": {
         ...
         "properties": {
           "item" : {
             "properties" : {
               "keywords" : {
                 "type" : "text",
                 "fields" : {
                   "keyword" : {
                     "type" : "keyword",
                     "ignore_above" : 256
                   }
                 }
               },
               "name" : {
                 "type" : "text",
                 "fields" : {
                   "keyword" : {
                     "type" : "keyword",
                     "ignore_above" : 256
                   }
                 }
               }
             }
           } 
         }
       }
     }
 } 

item"name": "Flavoured Butter" 如何相对于带有"name": "Butter Milk" 和得分0.39063013 的文档获得更高的0.61426216 分数?

我尝试将 boost 应用于 "item.name" 并删除 "item.keywords" 表单搜索字段以获得相同的结果。

Elasticsearch 中的分数如何运作?就相关性而言,上述结果是否正确?

【问题讨论】:

  • 能给我们提供索引的映射吗?因为对于带有"name": "Flavoured Butter"的文档,我得到了不同的得分值0.37598053
  • @ChandraPraneethN 我正在使用默认映射(有问题添加)。唯一的问题是 item 是嵌套在其父级中的文档,但这应该没有任何区别。

标签: elasticsearch elasticsearch-5


【解决方案1】:

phrase_prefix 的评分与best_fields 的评分相似,也就是说文档的评分是从 best_field 得到的评分,这里是item.keywords

所以,item.name 不会增加分数

参考:multi-match-types

您可以使用 2 个multi_match 查询来组合来自keywordsname 的分数。

{
   "query": {
      "bool": {
         "must": [{
            "multi_match": {
               "query": "butt",
               "type": "phrase_prefix",
               "fields": [
                  "item.keywords"
               ],
               "max_expansions": 10
            }
         },{
            "multi_match": {
               "query": "butt",
               "type": "phrase_prefix",
               "fields": [
                  "item.name"
               ],
               "max_expansions": 10
            }
         }]
      }
   }
}

【讨论】:

  • 有没有办法重写这个查询以获得正确的结果,在item.name 或其他东西上应用提升?
  • 您可以使用 2 个multi_match 查询。更新了答案。
猜你喜欢
  • 2021-07-22
  • 2018-03-23
  • 2020-06-22
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 2016-10-03
  • 2014-05-22
  • 1970-01-01
相关资源
最近更新 更多