Quantcast
Channel: IT瘾博客推荐
Viewing all articles
Browse latest Browse all 532

Elasticsearch6.X 去重详解_大数据_铭毅天下(公众号同名)-CSDN博客

$
0
0

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)统计去重数目。

GETbooks/_search
{"size":0,"aggs": {"books_count": {"cardinality": {"field":"title.keyword"}
}
}
}

2)返回去重内容

方式一:top_hits聚合

GETbooks/_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}

方式二:折叠

GETbooks/_search
{"query": {"match_all":{}
},"collapse": {"field":"title.keyword"}
}

方式二较方式一:
1)简化;
2)性能比aggs的实现要好很多。
更多DSL详见: http://t.cn/RmafXMJ

5、注意事项&小结

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

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



Viewing all articles
Browse latest Browse all 532

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>