1、题记

Elasticsearch有没有类似mysql的distinct的去重功能呢?

1)如何去重计数?
类似mysql: select distinct(count(1)) from my_table;
2)如何获取去重结果。
类似mysql:SELECT DISTINCT name,age FROM users;

2、需求

1)对ES的检索结果进行去重统计计数。
2)对ES的检索结果去重后显示

3、分析

1)统计计数需要借助ES聚合功能结合cardinality实现。
2)去重显示结果有两种方式:
方式一:使用字段聚合+top_hots聚合方式。
方式二:使用collapse折叠功能。

4、DSL源码

1)统计去重数目。
GET books/_search { "size":0, "aggs" : { "books_count" : { "cardinality" : {
"field" : "title.keyword" } } } }
2)返回去重内容

方式一: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)简化;
2)性能比aggs的实现要好很多。
更多DSL详见:http://t.cn/RmafXMJ <http://t.cn/RmafXMJ>

5、注意事项&小结

1、折叠功能ES5.3版本之后才发布的。
2、聚合&折叠只能针对keyword类型有效;
3、只要思想不滑坡,方案总比问题多!

参考:
https://elasticsearch.cn/article/132 <https://elasticsearch.cn/article/132>

2018年04月12日 0:06于家中床前

作者:铭毅天下
转载请标明出处,原文地址:
https://blog.csdn.net/laoyang360/article/details/79874984
<https://blog.csdn.net/laoyang360/article/details/79874984>
如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

)

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信