elasticsearch 语句 group by多个字段

先group by td_deviceId 再 group by uid

GET index*/_search
{
  "_source": ["td_deviceId"], 
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "createTime": {
              "gte": "2023-04-28T08:00:00.000+0800",
              "lte": "2023-05-08T23:59:59.068+0800"
            }
          }
        }
      ],
      "must": [
        {"match": {
          "platform": "wxmp"
        }}
      ]
    }
  },
  "aggs": {
    "by td_deviceId": {
      "terms": {
        "field": "td_deviceId",
        "size": 7000
        },
       "aggs": {
        "by uid": {
          "cardinality": {
            "field": "uid"
          }
        }
      }
    }
  }
}

同时group by 
GET index*/_search
{
  "_source": ["td_deviceId"], 
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "createTime": {
              "gte": "2023-04-28T08:00:00.000+0800",
              "lte": "2023-05-08T23:59:59.068+0800"
            }
          }
        }
      ],
      "must": [
        {"match": {
          "platform": "wxmp"
        }}
      ]
    }
  },
  "aggs": {
    "by td_deviceId": {
      "composite": {
        "sources": [
          {
            "bc td_deviceId": {
              "terms": {
                "field": "td_deviceId"
              }
            }
          },
          {
            "by uid":{
              "terms": {
                "field": "uid"
              }
            }
          }
        ]
      }
    }
  }
}

composite用于es 6以上,并且是实验参数

在 Elasticsearch 中,Composite Aggregation 用于分组聚合,并且可以帮助提高聚合操作的性能。它可以对多个字段进行分组,并通过指定一个或多个桶排序规则来对结果进行排序。

具体而言,Composite Aggregation 可以将一个或多个 field 作为分组依据,然后按照指定的顺序对每个分组中的文档进行排序。此外,它还可以对任意数量的桶进行分层,从而创建一个可以在多个级别上进行细分和总结的视图。例如,您可以使用 Composite Aggregation 来执行以下任务:

  • 对数据进行分页,返回特定数量的结果
  • 将一个字段分组,并按另一个字段进行排序
  • 按日期范围分组,并按数字字段排序

除此之外,Composite Aggregation 还有一些其他的配置选项,比如 size、after_key 等,可以帮助您更好地控制查询结果。

select count(group by uid), id,id_count from index where key = val and createTime between start and end group by id,uid having Count >1

GET /index/_search
{
  "_source": ["id"], 
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "createTime": {
              "gte": "start",
              "lte": "end"
            }
          }
        }
      ],
      "must": [
        {"match": {
          "key": "val"
        }}
      ]
    }
  },
  "aggs": {
     "id_count":{
     //分组总数
      "cardinality": {
            "field": "id"
          }
    },
    //多个字段分组
    "group by id":{
      "terms": {
        "field": "id",
        "order": {"uid_count":"desc"},
        "size":6000
      },
      "aggs": {
        "uid_count": {
          "cardinality": {
            "field": "uid"
          }
        },
        //uid count 并且 大于 1
        "uid_count_filter":{
          "bucket_selector": {
            "buckets_path": {"uidCount":"uid_count"},
            "script": "params.uidCount>1"
          }
        }
      }
    },
    
    //所有分组相加后的总数
    "stats_deviceId":{
      "stats_bucket":{
        "buckets_path":"group by id._count"
      }
    }
  }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在连表查询中使用GROUP BY多个字段可以实现更精细的数据分组。例如,假设我们有两个表,一个是Subject表,包含Subject_ID和Subject_Name字段,另一个是Selection表,包含Student_ID、Subject_ID和Semester字段。我们想要按照Subject_Name和Semester对选课记录进行分组。 可以使用以下SQL语句实现: SELECT Subject.Subject_Name, Selection.Semester, COUNT(*) as Count FROM Subject JOIN Selection ON Subject.Subject_ID = Selection.Subject_ID GROUP BY Subject.Subject_Name, Selection.Semester 这个查询将根据Subject_Name和Semester字段对Selection表进行分组,并计算每个分组中的记录数量。通过使用JOIN将Subject表和Selection表连接起来,我们可以获取到Subject_Name字段的值。\[2\] 这样,我们就可以得到按照Subject_Name和Semester分组的结果,并且可以对每个分组应用聚合函数,如COUNT、SUM、AVG等。\[2\]这样的查询可以帮助我们更好地理解和分析数据。\[1\] #### 引用[.reference_title] - *1* [ElasticSearch使用Java代码group by多个字段查询统计数量](https://blog.csdn.net/u013816580/article/details/127565718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [group by本质论与groupby多个字段](https://blog.csdn.net/zhao2chen3/article/details/116754688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值