Es学习第九课, 聚合查询和复合查询

时间:2022-04-10 21:50:45

ES除了实现前几课的基本查询,也可以实现类似关系型数据库的聚合查询,如平均值sum、最小值min、最大值max等等

我们就用上一课的数据作为参考来举例

聚合查询

sum聚合

sum是一个求累加值的聚合,其作用与关系型数据库中相同。

GET /lib4/items/_search
{
  "size": 0, //表示查询多少条文档,聚合只需总和结果,输出文档可以设置为0条
  "aggs": {  //aggs表示是聚合查询
    "price_of_sum": {//自行取名作为结果集
      "sum": {
        "field":"price"
      }
    }
  }
}

min聚合

min是一个求最小值的聚合,其作用与关系型数据库中相同

GET /lib4/items/_search
{
    "size": 0,
    "aggs": {
        "price_of_min": {
            "min": {
                "field": "price"
            }
        }
    }
}
 

avg聚合

avg是一个求平均值的聚合,其作用与关系型数据库中相同。

GET /lib4/items/_search
{
    "size": 0,
    "aggs": {
        "price_of_avg": {
            "avg": {
                "field": "price"
            }
        }
    }
}
 

cardinality聚合

cardinality是一个求基数的聚合,其作用与关系型数据库中相同。

GET /lib4/items/_search
{
    "size": 0,
    "aggs": {
        "price_of_cardi": {
            "cardinality": { //其实相当于该字段互不相同的值有多少类,输出的是种类数
                "field": "price"
            }
        }
    }
}
 

terms聚合

terms是一个分组聚合,其作用与关系型数据库中相同。

GET /lib4/items/_search  
{
    "size": 0,
    "aggs": {
        "price_of_by": {
            "terms": {
                "field": "price"   //按价格来分组
            }
        }
    }
}

复合查询

将多个基本查询组合成单一查询

本质上就是把我们上一课讲的各个查询组合在一起形成一个单一查询

使用bool查询
接受以下参数:
must:文档必须匹配设定条件才能被包含进来
must_not:文档必须不匹配设定条件才能被包含进来
should:如果满足语句中的任意语句,将增加_source,否则,无任何影响。主要用于修正每个文档的相关性得分
filter:必须匹配,但以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档