Elasticsearch 入门教程 – 实战分析_7

统计价格大于1200的电视平均价格

搜索+聚合

过滤+聚合

GET /tvs/sales/_search 

{

  "size": 0,

  "query": {

    "constant_score": {

      "filter": {

        "range": {

          "price": {

            "gte": 1200

          }

        }

      }

    }

  },

  "aggs": {

    "avg_price": {

      "avg": {

        "field": "price"

      }

    }

  }

}

{

  "took": 41,

  "timed_out": false,

  "_shards": {

    "total": 5,

    "successful": 5,

    "failed": 0

  },

  "hits": {

    "total": 7,

    "max_score": 0,

    "hits": []

  },

  "aggregations": {

    "avg_price": {

      "value": 2885.714285714286

    }

  }

}

统计牌品最近一个月的平均价格

GET /tvs/sales/_search 

{

  "size": 0,

  "query": {

    "term": {

      "brand": {

        "value": "长虹"

      }

    }

  },

  "aggs": {

    "recent_150d": {

      "filter": {

        "range": {

          "sold_date": {

            "gte": "now-150d"

          }

        }

      },

      "aggs": {

        "recent_150d_avg_price": {

          "avg": {

            "field": "price"

          }

        }

      }

    },

    "recent_140d": {

      "filter": {

        "range": {

          "sold_date": {

            "gte": "now-140d"

          }

        }

      },

      "aggs": {

        "recent_140d_avg_price": {

          "avg": {

            "field": "price"

          }

        }

      }

    },

    "recent_130d": {

      "filter": {

        "range": {

          "sold_date": {

            "gte": "now-130d"

          }

        }

      },

      "aggs": {

        "recent_130d_avg_price": {

          "avg": {

            "field": "price"

          }

        }

      }

    }

  }

}

aggs.filter,针对的是聚合去做的

如果放query里面的filter,是全局的,会对所有的数据都有影响

但是,如果,比如说,你要统计,长虹电视,最近1个月的平均值; 最近3个月的平均值; 最近6个月的平均值

bucket filter:对不同的bucket下的aggs,进行filter