当前位置:   article > 正文

(转)es多字段分组聚合3种实现方式_es 字段值分组

es 字段值分组

转自:

https://blog.csdn.net/OliverCaro/article/details/120763278


一、ElasticSearch的分组聚合
官网文档地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_multi_field_terms_aggregation

实现背景:实现类似SQL的group by功能:

select team,age from a_person group by team,age;

二、多字段分组聚合的三种实现方法(性能不高)
在ElasticSearch中,实现多字段分组聚合的方式包括:

1、使用 Script
使用脚本script从多个字段聚合分组:

dsl:
 

  1. GET /_search
  2. {
  3. "query": {
  4. "match_all": {}
  5. },
  6. "aggs": {
  7. "group_ab": {
  8. "terms": {
  9. "script": {
  10. "source": "doc['a'].value +','+ doc['b'].value",
  11. "lang": "painless"
  12. }
  13. }
  14. }
  15. }
  16. }
  17. }

2、使用 copy_to 字段(需要提前mapping,暂不考虑)
在创建索引的mapping时创建一个新的专用copy_to字段,后续可以在这个字段上进行汇总查询。

3、multi_terms 聚合
Multi Terms aggregation | Elasticsearch Guide [7.13] | Elastic

multi_terms 聚合将来自多个字段的术语组合成一个复合key。会禁用全局序数,并且比从单个term聚合要慢。

注意7.12版本新特性,旧版本不用考虑

dsl:
 

  1. GET /products/_search
  2. {
  3. "aggs": {
  4. "genres_and_products": {
  5. "multi_terms": {
  6. "terms": [{
  7. "field": "genre"
  8. }, {
  9. "field": "product"
  10. }]
  11. }
  12. }
  13. }
  14. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/68186
推荐阅读
相关标签
  

闽ICP备14008679号