Elasticsearch - 聚合查询

py卡卡 / 2024-04-26 / 原文

group by

# 使用数据
PUT /book/_doc/2
{
  "name": "java编程思想",
  "desc": "我们通常只需一天来审核你的信息。如果我们发现你的帐户确实未违反我们的社群守则,你便可以再为次使用Facebook官网。",
  "price": 10.91,
  "timestamp": "2024-01-02 1:55:12",
  "pic": "021.png",
  "tags": ["spring", "php"]
}

sql方式:
select price, count(*) as _count from book group by price

GET /book/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": { # 相当于group by
    "as_group_by": { # 查询结果的别名
      "terms": {
        "field": "price"
      }
    }
  }
}

  1. 查询出的聚合数据在aggregations下
  2. 查询出的数据包含index的原始数据 不是想要的只返回price,_count信息,可以通过size:0来解决
GET /book/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "as_group_by": {
      "terms": {
        "field": "price"
      }
    }
  }
}