为了简单起见,我将使用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"
答案 0 :(得分:1)
ElasticSearch非常擅长这样做,但您需要以不同的方式构建文档。您需要拥有N个文档,而不是包含N个注释的单个文档,每个文档都有一个。