Elasticsearch有沒有相似mysql的distinct的去重功能呢?mysql
1)如何去重計數?
相似mysql: select distinct(count(1)) from my_table;
2)如何獲取去重結果。
相似mysql:SELECT DISTINCT name,age FROM users;sql
1)對ES的檢索結果進行去重統計計數。
2)對ES的檢索結果去重後顯示性能
1)統計計數須要藉助ES聚合功能結合cardinality實現。
2)去重顯示結果有兩種方式:
方式一:使用字段聚合+top_hots聚合方式。
方式二:使用collapse摺疊功能。spa
GET books/_search { "size":0, "aggs" : { "books_count" : { "cardinality" : { "field" : "title.keyword" } } } }
方式一:top_hits聚合code
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 }
方式二:摺疊blog
GET books/_search { "query": { "match_all":{} }, "collapse": { "field": "title.keyword" } }
方式二較方式一:
1)簡化;
2)性能比aggs的實現要好不少。
更多DSL詳見:http://t.cn/RmafXMJget
一、摺疊功能ES5.3版本以後才發佈的。
二、聚合&摺疊只能針對keyword類型有效;源碼