ElasticSearch中distinct,count和group by的实现
生活随笔
收集整理的這篇文章主要介紹了
ElasticSearch中distinct,count和group by的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在業務中需要使用ES來進行數據查詢,在某些場景下需要對數據進行去重,以及去重后的統計。為了方便大家理解,特意從SQL角度,方便大家能夠理解ES查詢語句。
?
1 - distinct
SELECT DISTINCT(user_id) FROM table WHERE user_id_type = 3;?
{"query": {"term": {"user_id_type": 3}},"collapse": {"field": "user_id"} }{..."hits": {"hits": [{"_index": "es_qd_mkt_visitor_packet_dev_v1_20180621","_type": "ad_crowd","_source": {"user_id": "wx2af8414b502d4ca2_oHtrD0Vxv-_8c678figJNHmtaVQQ","user_id_type": 3},"fields": {"user_id": ["wx2af8414b502d4ca2_oHtrD0Vxv-_8c678figJNHmtaVQQ"]}}]} }
總結:使用collapse字段后,查詢結果中[hits]中會出現[fields]字段,其中包含了去重后的user_id
2 - count + distinct
SELECT COUNT(DISTINCT(user_id)) FROM table WHERE user_id_type = 3;{"query": {"term": {"user_id_type": 3}},"aggs": {"count": {"cardinality": {"field": "user_id"}}} }
{..."hits": {...},"aggregations": {"count": {"value": 121}} }
總結:aggs中cardinality的字段代表需要distinct的字段
3 - count + group by
SELECT COUNT(user_id) FROM table GROUP BY user_id_type;{"aggs": {"user_type": {"terms": {"field": "user_id_type"}}} }
{..."hits": {...},"aggregations": {"user_type": {..."buckets": [{"key": 4,"doc_count": 1220},{"key": 3,"doc_count": 488}]}} }
總結:aggs中terms的字段代表需要gruop by的字段
4 - count + distinct + group by
SELECT COUNT(DISTINCT(user_id)) FROM table GROUP BY user_id_type;{"aggs": {"user_type": {"terms": {"field": "user_id_type"},"aggs": {"count": {"cardinality": {"field": "user_id"}}}}} } {..."hits": {...},"aggregations": {"user_type": {..."buckets": [{"key": 4,"doc_count": 1220, //去重前數據1220條"count": {"value": 276 //去重后數據276條}},{"key": 3,"doc_count": 488, //去重前數據488條"count": {"value": 121 //去重后數據121條}}]}} }
4 - count + distinct + group by
SELECT COUNT(DISTINCT(user_id)) FROM table WHERE user_id_type = 2 GROUP BY user_id;
總結:對于既有group by又有distinct的查詢要求,需要在aggs中嵌套子aggs
5 - 注意事項
collapse關鍵字
轉載于:https://www.cnblogs.com/taozi32/p/10411524.html
總結
以上是生活随笔為你收集整理的ElasticSearch中distinct,count和group by的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018寒假作业学习总结
- 下一篇: Docker部署脚本