我有Elasticsearch
中的文档,如:
{
"key1":1,
"key2":2,
"key3":3
}
我想创建一个返回30个文档的查询,这些文档是:
的并集key1
+ key2
+ key3
我有两个想法:
DisMaxQuery
- 但我无法使用排序。可能错过了一些东西.. MultiSearch
- 但我想获得一个结果对象任何建议都会有所帮助!
答案 0 :(得分:1)
另一个想法是在terms
,key1
和key2
上添加三个key3
聚合,每个聚合按max
子聚合排序(为了获取每个密钥的最高值),并为每个密钥添加另一个top_hits
子聚合。每个密钥可能会少于10个文档,如果这是一个问题,您可以将size
聚合的terms
增加到2或3,然后在客户端过滤掉不需要的热门命中。< / p>
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"topkey1": {
"terms": {
"field": "key1",
"size": 1,
"order": {
"max_key1": "desc"
}
},
"aggs": {
"max_key1": {
"max": {
"field": "key1"
}
},
"key1_tophits": {
"top_hits": {
"size": 10
}
}
}
},
"topkey2": {
"terms": {
"field": "key2",
"size": 1,
"order": {
"max_key2": "desc"
}
},
"aggs": {
"max_key2": {
"max": {
"field": "key2"
}
},
"key2_tophits": {
"top_hits": {
"size": 10
}
}
}
},
"topkey3": {
"terms": {
"field": "key3",
"size": 1,
"order": {
"max_key3": "desc"
}
},
"aggs": {
"max_key3": {
"max": {
"field": "key3"
}
},
"key_tophits": {
"top_hits": {
"size": 10
}
}
}
}
}
}