您的位置:首页 > 其它

Elasticsearch学习笔记2----聚合操作及常见问题解决

2017-11-04 15:52 330 查看
aggs 聚合

"terms" : { " field":  "" }
分组

"avg" : { "field" : "price" }
求平均值

"order": { "avg_price": "desc" }
排序

最后一个案例是按范围分组

第一个分析需求:计算每个tag下的商品数量(根据tag分组)
GET /ecommerce/product/_search

{

  "aggs": {

    "group_by_tags": {

      "terms": { "field": "tags" }

    }

  }

}

发现报错 

 "error": {

    "root_cause": [

      {

        "type": "illegal_argument_exception",

        "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [tags] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."

      }

    ],

解决:将文本field的fielddata属性设置为true

PUT /ecommerce/_mapping/product

{

  "properties": {

    "tags": {

      "type": "text",

      "fielddata": true

    }

  }

}

再重复上面操作就可以了。

第三个聚合分析的需求:先分组,再算每组的平均值,计算每个tag下的商品的平均价格
GET /ecommerce/product/_search

{

    "size": 0,

    "aggs" : {

        "group_by_tags" : {

            "terms" : { "field" : "tags" },

            "aggs" : {

                "avg_price" : {

                    "avg" : { "field" : "price" }

                }

            }

        }

    }

}

----------------------------------------------------------------------------------------------------------------

第四个数据分析需求:计算每个tag下的商品的平均价格,并且按照平均价格降序排序

GET /ecommerce/product/_search

{

    "size": 0,

    "aggs" : {

        "all_tags" : {

            "terms" : { "field" : "tags", "order": { "avg_price": "desc" } },

            "aggs" : {

                "avg_price" : {

                    "avg" : { "field" : "price" }

                }

            }

        }

    }

}
----------------------------------------------------------------------------------------------------------------

第五个数据分析需求:按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格。
GET /ecommerce/product/_search

{

  "size": 0,

  "aggs": {

    "group_by_price": {

      "range": {

        "field": "price",

        "ranges": [

          {

            "from": 0,

            "to": 20

          },

          {

            "from": 20,

            "to": 40

          },

          {

            "from": 40,

            "to": 50

          }

        ]

      },

      "aggs": {

        "group_by_tags": {

          "terms": {

            "field": "tags"

          },

          "aggs": {

            "average_price": {

              "avg": {

                "field": "price"

              }

            }

          }

        }

      }

    }

  }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: