/ select…のような/ elasticsearch…持っていることによるグループ分け - sql、elasticsearch、順序、持っ

select…のようなelasticsearch、…を持つグループ化…sql、elasticsearch、順序、持っている

elasticsearchで、このSQLのような機能を実現する方法:

SELECT a, sum(b), sum(c), d
FROM TableA
WHERE a IN (1,2,3,4) AND d = 88
GROUP BY a
HAVING sum(b) > 10
ORDER BY sum(b) desc, sum(c) asc
LIMIT 10 OFFSET 5;

これまでのところ私はこれしかしていません:

{
"size":0,
"query":{
"filtered": {
"filter":{
"terms":{
"a": [1, 2, 3, 4]
}
},
"query":{
"match": {
"d": 8
}
}
}
},

"aggs": {
"group_by_a":{
"terms":{
"field": "a",
"size": 10,
"order" : { "sum(b)" : "desc" }
},
"aggs" : {
"sum(b)": {"sum": {"field": "b"}},
"sum(c)": {"sum": {"field": "c"}}
}
}
}
}

これは私がこれを達成したばかりです:

SELECT a, sum(b), sum(c)
FROM TableA
WHERE a IN (1,2,3,4) AND d = 88
GROUP BY a
HAVING sum(b) > 10
ORDER BY sum(b) desc
LIMIT 10;

そして追加のreturnフィールドをどうするか d、有する条件、追加注文 sum(c)asc、 そしてその オフセット5

とても悲しかった 有する条項サポートされていない 現在。

回答:

回答№1は1

これは5.2で次のように実装されています。 バケットセレクタ集約、元

GET /_search
{
"size": 0,
"query": {
"term": { "code": "16001" }
},
"aggs" : {
"errors_per_week" : {
"date_histogram" : {
"field" : "date",
"interval" : "week"
},
"aggs": {
"total_errors": {
"value_count": {
"field": "code"
}
},
"error_bucket_filter": {
"bucket_selector": {
"buckets_path": {
"totalErrors": "total_errors"
},
"script": "params.totalErrors > 5"
}
}
}
}
}
}