前提・実現したいこと
Elasticsearchで以下のようなindexがあるとします。
id | name | sub_id | group_id |
---|---|---|---|
1 | No.1 | 100 | 0 |
2 | No.2 | 102 | 1 |
3 | No.3 | 100 | 0 |
4 | No.4 | 101 | 5 |
5 | No.5 | 100 | 0 |
6 | No.6 | 100 | 0 |
7 | No.7 | 102 | 1 |
これをsub_idでgroup byして集計し、さらにgroup_idでorder byしたいのですが、どのようにすれば実現できるでしょうか?
mysql風に書くと、このような感じに取得したいです。
sub_id | count(sub_id) | group_id |
---|---|---|
100 | 4 | 0 |
102 | 2 | 1 |
101 | 1 | 5 |
group_idのソートは数値順でのソートです。
aggregationsを利用して、group byまではできました。
以下その際のパラメータです。
aggregations: { sub_id_count: { terms: { field: 'sub_id', order: { '_count': 'desc' } } } }
ここからさらにorder byするにはどうすれば良いでしょうか。
以下のようにtop_hitsも試して見ましたが、うまく行きませんでした。
aggregations: { sub_id_count: { terms: { field: 'sub_id', order: { '_count': 'desc' } } }, aggregations: { top_hits_group_id: { top_hits: { sort: [ { "date": { "order": "desc" } } ] } } }
あまり関係はありませんが、Elasticsearchでの検索はruby on railsのプログラム上で利用しています。
あなたの回答
tips
プレビュー