首页 文章

如何计算Elasticsearch相关性得分?

提问于
浏览
0

我正在使用 multi_matchphrase_prefix 在Elasticsearch 5.5中进行全文搜索 . 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.61426216 的高分并得分 0.39063013

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

Elasticsearch的得分如何?上述结果在相关性方面是否正确?

1 回答

  • 0

    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
                }
             }]
          }
       }
    }
    

相关问题