Elasticsearch6.X 去重
1、題記
Elasticsearch有沒(méi)有類似mysql的distinct的去重功能呢?
1)如何去重計(jì)數(shù)??
類似mysql: select distinct(count(1)) from my_table;?
2)如何獲取去重結(jié)果。?
類似mysql:SELECT DISTINCT name,age FROM users;
2、需求
1)對(duì)ES的檢索結(jié)果進(jìn)行去重統(tǒng)計(jì)計(jì)數(shù)。?
2)對(duì)ES的檢索結(jié)果去重后顯示
3、分析
1)統(tǒng)計(jì)計(jì)數(shù)需要借助ES聚合功能結(jié)合cardinality實(shí)現(xiàn)。?
2)去重顯示結(jié)果有兩種方式:?
方式一:使用字段聚合+top_hots聚合方式。?
方式二:使用collapse折疊功能。
4、DSL源碼
1)統(tǒng)計(jì)去重?cái)?shù)目。
GET books/_search { "size":0, "aggs" : { "books_count" : { "cardinality" : { "field" : "title.keyword" } } } }2)返回去重內(nèi)容
方式一:top_hits聚合
GET books/_search { "query": { "match_all": {} }, "aggs": { "type": { "terms": { "field": "title.keyword", "size": 10 }, "aggs": { "title_top": { "top_hits": { "_source": { "includes": ["title"] }, "sort": [ { "title.keyword": { "order": "desc" } } ], "size":1 } } } } }, "size": 0 }方式二:折疊
GET books/_search { "query": { "match_all":{} }, "collapse": { "field": "title.keyword" } }方式二較方式一:?
1)簡(jiǎn)化;?
2)性能比aggs的實(shí)現(xiàn)要好很多。?
更多DSL詳見(jiàn):http://t.cn/RmafXMJ
5、注意事項(xiàng)&小結(jié)
1、折疊功能ES5.3版本之后才發(fā)布的。?
2、聚合&折疊只能針對(duì)keyword類型有效;?
3、只要思想不滑坡,方案總比問(wèn)題多!
參考:?
https://elasticsearch.cn/article/132
總結(jié)
以上是生活随笔為你收集整理的Elasticsearch6.X 去重的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Elasticsearch Java 操
- 下一篇: Elasticsearch实现类Goog