我的所有文档都有一个uid
字段,其中包含将文档链接至用户的ID。存在多个具有相同uid
的文档。
我想对所有文档执行搜索,并仅返回每个唯一uid
的最高评分文档。
选择相关文档的查询是一个简单的multi_match
查询。
我的所有文档都有一个uid
字段,其中包含将文档链接至用户的ID。存在多个具有相同uid
的文档。
我想对所有文档执行搜索,并仅返回每个唯一uid
的最高评分文档。
选择相关文档的查询是一个简单的multi_match
查询。
您需要使用top_hits
聚合。
对于您的具体情况:
{
"query": {
"multi_match": {
...
}
},
"aggs": {
"top-uids": {
"terms": {
"field": "uid"
},
"aggs": {
"top_uids_hits": {
"top_hits": {
"sort": [
{
"_score": {
"order": "desc"
}
}
],
"size": 1
}
}
}
}
}
}
上述查询执行了您的multi_match
查询,并根据uid
聚合结果。对于每个uid存储桶,它只返回一个结果,但在存储桶中的所有文档按_score
得分进行降序排序后返回。
GET /_search
{
"query": {
"multi_match" : {
"query": "this is a test",
"fields": [ "subject", "message", "uid" ]
}
},
"collapse" : {
"field" : "uid"
},
"size": 20,
"from": 100
}