es

ElasticSearch基本语法-聚合分析

2018-07-04  本文已影响41人  Haohao_95

聚合操作

1. 分组

GET /index/type/_search
{
  "aggs": {                  //表示聚合分析操作
    "group_by_tags": {       //任意取的名字
      "terms": {             //选择aggs的种类,即分组
        "field": "tags"      //指定field
      }
    }
  }
}

最终根据tags得出每组的数量

2. 搜索+聚合

GET /index/type/_search
{
  "size" : 0,
  "query": {
    "match": {
      "name" : "element"
    }
  },
  "aggs": {
    "group_by_tags": {
      "terms": {
        "field":"tags"
      }
    }
  }
}

就是简单的先搜索后聚合

3.先分组,再算每组的平均值

GET /ecommerce/product/_search
{
  "size": 0, 
  "aggs": {
    "group_by_tags": {
      "terms": {
        "field": "tags",
        "size": 10
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

用一种聚合嵌套的方式来实现。首先以tags分组,分组之后在使用aggs来计算每个组的价格平均值。

4. 排序需求

按照tags分组,并显示每一组的平均价格。之后组的排序按照avg_price降序排列。

GET /commerce/producer/_search
{
  "size": 0,
  "aggs": {
    "all_tags": {
      "terms": {
        "field" : "tags",
        "order" : {"avg_price": "desc"}
      },
      "aggs" : {
        "avg_price": {
          "avg": {"field": "price"}
        }
      }
    }
  }
}

这种语法即在分组语句中加入order选项即可。

5.按照价格区间分组,每组内按照tags分组。最后计算每组的平均价格。

GET /ecommerce/product/_search
{
  "aggs": {
    "group_by_price":{
      "range": {
        "field": "price",
        "ranges": [
          {
            "from": 0,
            "to": 20
          },
          {
            "from": 20,
            "to": 40
          },
          {
            "from": 40,
            "to": 60
          }
        ]
      },
      "aggs": {
        "group_by_tags": {
          "terms": {
            "field": "tags",
            "size": 10
          },
          "aggs": {
            "avg_price": {
              "avg": {
                "field": "price"
              }
            }
          }
        }
      }
    }
  }
}
上一篇下一篇

猜你喜欢

热点阅读