ElasticSearch | 聚合的作用范圍 | 聚合中的排序

聚合的作用范圍

  • ElasticSearch 聚合分析的默認(rèn)作用范圍是 Query 的查詢結(jié)果集;
  • 同時 ElasticSearch 還支持以下方式改變聚合的作用范圍:
    • Filter
    • Post Filter
    • Global

聚合的作用范圍 | 舉幾個栗子

query 的作用范圍
  • 年齡大于 40 歲員工的分桶;
POST employees/_search
{
  "size": 0,
  "query": {
    "range": {
      "age": {
        "gte": 20
      }
    }
  },
  "aggs": {
    "jobs": {
      "terms": {
        "field":"job.keyword"
      }
    }
  }
}
filter 的作用范圍
  • 在具體的聚合當(dāng)中,做范圍的限制,比如在聚合 older_person 中,限定年齡大于 35;
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"
      }
    }
  }
}
post_filter 的作用范圍
  • 先分桶,按 job.keyword;
  • 完了把 "job.keyword": "Dev Manager" 的桶的數(shù)據(jù)展示出來;
POST employees/_search
{
  "aggs": {
    "jobs": {
      "terms": {
        "field": "job.keyword"
      }
    }
  },
  "post_filter": {
    "match": {
      "job.keyword": "Dev Manager"
    }
  }
}
global 的作用范圍
  • "global":{} 的意思是,在聚合 all 中,會忽略掉 query 中限定的條件,對索引 employees 中的所有的文檔的 salary 字段做平均值;
POST employees/_search
{
  "size": 0,
  "query": {
    "range": {
      "age": {
        "gte": 40
      }
    }
  },
  "aggs": {
    "jobs": {
      "terms": {
        "field":"job.keyword"
      }
    },
    "all":{
      "global":{},
      "aggs":{
        "salary_avg":{
          "avg":{
            "field":"salary"
          }
        }
      }
    }
  }
}

聚合中的排序

通過 order 字段,可以對聚合的結(jié)果排序;默認(rèn)桶的排序是按桶里文檔數(shù)由大到小排序的;

聚合中的排序 | 舉個栗子

  • 按桶的 _count 升序排序;
  • 在桶的 _count 相等的情況下,按 _key 降序排序;
POST employees/_search
{
  "size": 0,
  "query": {
    "range": {
      "age": {
        "gte": 20
      }
    }
  },
  "aggs": {
    "jobs": {
      "terms": {
        "field":"job.keyword",
        "order":[
          {"_count":"asc"},
          {"_key":"desc"}
          ]        
      }
    }
  }
}
  • 先按 job.keyword 分桶;
  • 計算每個桶中 salary 字段的平均值;
  • 按桶內(nèi)文檔 salary 的平均值降序給桶排序;
POST employees/_search
{
  "size": 0,
  "aggs": {
    "jobs": {
      "terms": {
        "field":"job.keyword",
        "order":[{
            "avg_salary":"desc"
          }]      
      },
      "aggs": {
        "avg_salary": {
          "avg": {
            "field":"salary"
          }
        }
      }
    }
  }
}
  • 按 job.keyword 分桶;
  • 對桶內(nèi)的文檔做 stat 統(tǒng)計分析;
  • 桶的結(jié)果按桶內(nèi) salary 字段的最小值給桶排序;
POST employees/_search
{
  "size": 0,
  "aggs": {
    "jobs": {
      "terms": {
        "field":"job.keyword",
        "order":[  {
            "stats_salary.min":"desc"
          }]
      },
      "aggs": {
        "stats_salary": {
          "stats": {
            "field":"salary"
          }
        }
      }
    }
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容