zoukankan      html  css  js  c++  java
  • es 聚合方式

    ES支持灵活的聚合方式,它不仅支持聚合和查询相结合,而且还可以使聚合的过滤条件不影响搜索条件,并且还支持在聚合后的结果中进行过滤筛选。

    直接聚合

    直接聚合指的是聚合时的DSL没有query子句,是直接对索引内的所有文档进行聚合。

    GET /hotel/_search
    {
      "size": 0,
      "aggs": {
        "my_agg": { //聚合名称 
          "avg": {
            "field": "price" //计算文档的平均价格 
          }
        }
      }
    }

    先查询再聚合

    与直接聚合相对应,这种查询方式需要增加query子句,query子句和普通的query查询没有区别,参加聚合的文档必须匹配query查询。

    {
      // "size": 0,
      "query": { //指定查询query逻辑 
        "term": {
          "city": {
            "value": "北京"
          }
        }
      },
      "aggs": { //指定聚合逻辑 
        "my_agg": {
          "avg": {
            "field": "price"
          }
        }
      }
    }

    前过滤器

    有时需要对聚合条件进一步地过滤,但是又不能影响当前的查询条件。

    {
      "size": 0,
      "query": { //指定查询的query逻辑 
        "term": {
          "city": {
            "value": "青岛"
          }
        }
      },
      "aggs": {
        "my_agg": {
          "filter": { //指定过滤器逻辑 
            "term": {
              "full_room": true
            }
          },
          "aggs": { //指定聚合逻辑 
            "my_avg": {
              "avg": {
                "field": "price"
              }
            }
          }
        }
      }
    }

    后过滤器

    该过滤器是在查询和聚合之后进行过滤的,因此它的过滤条件对聚合没有影响。

    {
      //"size": 0,  
      "query": { //指定查询的query逻辑 
        "match": {
          "title": "酒店"
        }
      },
      "aggs": { //指定聚合逻辑 
        "my_agg": {
          "avg": {
            "field": "price",
            "missing": 200
          }
        }
      },
      "post_filter": { //指定后过滤器逻辑 
        "term": {
          "city": "北京"
        }
      }
    }
  • 相关阅读:
    c# 线程同步各类锁
    C#_从DataTable中检索信息
    永无BUG
    标志枚举
    将多行按分隔符"|"合成一行
    回车换行浅析
    url传输编码
    xshell 禁用铃声 提示音
    php 编译安装 mysql.so
    301 302 304
  • 原文地址:https://www.cnblogs.com/ooo0/p/15687875.html
Copyright © 2011-2022 走看看