在Elasticsearch6.X中如何实现去重

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

5、注意事项&小结

1、折叠功能ES5.3版本之后才发布的。 
2、聚合&折叠只能针对keyword类型有效;

转载于:https://www.cnblogs.com/pyspark/p/8817716.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值