ElasticSearch - TopHits为嵌套聚合中的所有匹配提供相同的分数

时间:2018-03-10 00:32:16

标签: elasticsearch elasticsearch-aggregation

为了简单起见,我将使用elasticsearch中的这个示例,这样我就可以更轻松地解释我的问题。 我需要的是获得每个用户的最佳评论(最佳匹配)。

这个例子我在底部又添加了一条评论。

PUT /sales/_doc/1?refresh {
"tags": ["car", "auto"],
"comments": [
    {"username": "baddriver007", "comment": "This car could have better brakes"},
    {"username": "dr_who", "comment": "Where's the autopilot? Can't find it"},
    {"username": "ilovemotorbikes", "comment": "This car has two extra wheels"},
    {"username": "baddriver007", "comment": "This is fast car"}
]}

我也更改了查询,现在它与嵌套(注释)数组中的单词fast匹配。

POST /sales/_search {
"query": {
   "nested": {
     "path": "comments",
     "query": {
       "match": {
         "comments.comment": "fast"
       }
     }
   }
},
"aggs": {
    "by_sale": {
        "nested" : {
            "path" : "comments"
        },
        "aggs": {
            "by_user": {
                "terms": {
                    "field": "comments.username",
                    "size": 1
                },
                "aggs": {
                    "by_nested": {
                        "top_hits":{
                          "explain": true
                        }
                    }
                }
            }
        }
    }
}}

接下来,我希望每个评论的回复都能独立评分,并且包含fast字的评论得分更高,因为我使用的是top_hits指标。但在回复中,来自用户baddriver007的评论都有相同的评分,_explanation的{​​{1}}评论为top_hits。我错过了什么?

"description": "Not a match"

1 个答案:

答案 0 :(得分:1)

ElasticSearch非常擅长这样做,但您需要以不同的方式构建文档。您需要拥有N个文档,而不是包含N个注释的单个文档,每个文档都有一个。