笔记四十:聚合的作用范围及排序

聚合的作用范围

  • ES 聚合分析的默认作用范围是query的查询结果集

  • 同时 ES 还支持以下方式改变聚合的作用范围

    • Filter

    • Post_Filter

    • Global

      # Query
      POST employees/_search
      {
      "size": 0,
      "query": {
      "range": {
      "age": {
        "gte": 20
      }
      }
      },
      "aggs": {
      "jobs": {
      "terms": {
        "field":"job.keyword"
      
      }
      }
      }
      }

Filter

#Filter
POST employees/_search
{
  "size": 0,
  "aggs": {
    "older_person": {
      "filter":{
        "range":{
          "age":{
            "from":35
          }
        }
      },
      "aggs":{
         "jobs":{
           "terms": {
        "field":"job.keyword"
      }
      }
    }},
    "all_jobs": {
      "terms": {
        "field":"job.keyword"

      }
    }
  }
}

ES 笔记四十:聚合的作用范围及排序

Post_Filter

  • 是对聚合分析后的文档进行再次过滤
  • Size 无需设置为0
  • 使用场景
    • 一条语句,获取聚合信息 + 获取符合条件的文档
#Post field. 一条语句,找出所有的job类型。还能找到聚合后符合条件的结果
POST employees/_search
{
  "aggs": {
    "jobs": {
      "terms": {
        "field": "job.keyword"
      }
    }
  },
  "post_filter": {
    "match": {
      "job.keyword": "Dev Manager"
    }
  }
}

Global

#global
POST employees/_search
{
  "size": 0,
  "query": {
    "range": {
      "age": {
        "gte": 40
      }
    }
  },
  "aggs": {
    "jobs": {
      "terms": {
        "field":"job.keyword"

      }
    },

    "all":{
      "global":{},//Golbal,无视query,对全部文档进行统计
      "aggs":{
        "salary_avg":{
          "avg":{
            "field":"salary"
          }
        }
      }
    }
  }
}

排序

  • 指定order,按照count和key 排序
    • 默认情况,按照count降序排序
    • 指定size,就能返回相应的桶
      #排序 order
      #count正序 and key倒叙
      POST employees/_search
      {
      "size": 0,
      "query": {
        "range": {
          "age": {
            "gte": 20
          }
        }
      },
      "aggs": {
        "jobs": {
          "terms": {
            "field": "job.keyword",
            "order": [
              {
                "_count": "asc"
              },
              {
                "_key": "desc"
              }
            ]
          }
        }
      }
      }

基于子聚合的值排序

  • 基于子聚合的数值进行排序
    POST employees/_search
    {
    "size": 0,
    "aggs": {
      "jobs": {
        "terms": {
          "field": "job.keyword",
          "order": [
            {
              "avg_salary": "desc"
            }
          ]
        },
        "aggs": {
          "avg_salary": {
            "avg": {
              "field": "salary"
            }
          }
        }
      }
    }
    }
  • 使用子聚合,Aggregation name
    POST employees/_search
    {
    "size": 0,
    "aggs": {
      "jobs": {
        "terms": {
          "field": "job.keyword",
          "order": [
            {
              "stats_salary.min": "desc"
            }
          ]
        },
        "aggs": {
          "stats_salary": {
            "stats": {
              "field": "salary"
            }
          }
        }
      }
    }
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
快乐就是解决一个又一个的问题!
CrazyZard
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!