<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • ElasticSearch7.3學習(二十八)----聚合實戰之電視案例

    一、電視案例

    1.1 數據準備

    創建索引及映射

    建立價格、顏色、品牌、售賣日期 字段

    PUT /tvs
    PUT /tvs/_mapping
    {
      "properties": {
        "price": {
          "type": "long"
        },
        "color": {
          "type": "keyword"
        },
        "brand": {
          "type": "keyword"
        },
        "sold_date": {
          "type": "date"
        }
      }
    }

    插入數據

    POST /tvs/_bulk
    {"index":{}}
    {"price":1000,"color":"紅色","brand":"長虹","sold_date":"2019-10-28"}
    {"index":{}}
    {"price":2000,"color":"紅色","brand":"長虹","sold_date":"2019-11-05"}
    {"index":{}}
    {"price":3000,"color":"綠色","brand":"小米","sold_date":"2019-05-18"}
    {"index":{}}
    {"price":1500,"color":"藍色","brand":"TCL","sold_date":"2019-07-02"}
    {"index":{}}
    {"price":1200,"color":"綠色","brand":"TCL","sold_date":"2019-08-19"}
    {"index":{}}
    {"price":2000,"color":"紅色","brand":"長虹","sold_date":"2019-11-05"}
    {"index":{}}
    {"price":8000,"color":"紅色","brand":"三星","sold_date":"2020-01-01"}
    {"index":{}}
    {"price":2500,"color":"藍色","brand":"小米","sold_date":"2020-02-12"}

    1.2 統計哪種顏色的電視銷量最高

    不加query 默認查詢全部

    GET /tvs/_search
    {
      "size": 0,
      "aggs": {
        "popular_colors": {
          "terms": {
            "field": "color"
          }
        }
      }
    }

    查詢條件解析

    • size:只獲取聚合結果,而不要執行聚合的原始數據
    • aggs:固定語法,要對一份數據執行分組聚合操作
    • popular_colors:就是對每個aggs,都要起一個名字,
    • terms:根據字段的值進行分組
    • field:根據指定的字段的值進行分組

    返回

    {
      "took" : 121,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 8,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "popular_colors" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
            {
              "key" : "紅色",
              "doc_count" : 4
            },
            {
              "key" : "綠色",
              "doc_count" : 2
            },
            {
              "key" : "藍色",
              "doc_count" : 2
            }
          ]
        }
      }
    }

    返回結果解析

    • hits.hits:我們指定了size是0,所以hits.hits就是空的
    • aggregations:聚合結果
    • popular_color:我們指定的某個聚合的名稱
    • buckets:根據我們指定的field劃分出的buckets
    • key:每個bucket對應的那個值
    • doc_count:這個bucket分組內,有多少個數量,其實就是這種顏色的銷量
    • bucket中的數據的默認的排序規則:按照doc_count降序排序

    1.3 統計每種顏色電視平均價格

    GET /tvs/_search
    {
      "size": 0,
      "aggs": {
        "colors": {
          "terms": {
            "field": "color"
          },
          "aggs": {
            "avg_price": {
              "avg": {
                "field": "price"
              }
            }
          }
        }
      }
    }

    在一個aggs執行的bucket操作(terms),平級的json結構下,再加一個aggs,

    這個第二個aggs內部,同樣取個名字,執行一個metric操作,avg,對之前的每個bucket中的數據的指定的field,求一個平均值

    返回:

    {
      "took" : 2,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 8,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "colors" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
            {
              "key" : "紅色",
              "doc_count" : 4,
              "avg_price" : {
                "value" : 3250.0
              }
            },
            {
              "key" : "綠色",
              "doc_count" : 2,
              "avg_price" : {
                "value" : 2100.0
              }
            },
            {
              "key" : "藍色",
              "doc_count" : 2,
              "avg_price" : {
                "value" : 2000.0
              }
            }
          ]
        }
      }
    }

    返回結果解析:

    • avg_price:我們自己取的metric aggs的名字
    • value:我們的metric計算的結果,每個bucket中的數據的price字段求平均值后的結果

    相當于sql: select avg(price) from tvs group by color

    1.4 每個顏色下,平均價格及每個顏色下,每個品牌的平均價格

    多個子聚合

    GET /tvs/_search
    {
      "size": 0,
      "aggs": {
        "group_by_color": {
          "terms": {
            "field": "color"
          },
          "aggs": {
            "color_avg_price": {
              "avg": {
                "field": "price"
              }
            },
            "group_by_brand": {
              "terms": {
                "field": "brand"
              },
              "aggs": {
                "brand_avg_price": {
                  "avg": {
                    "field": "price"
                  }
                }
              }
            }
          }
        }
      }
    }

    返回

    查看代碼
    {
      "took" : 2,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 8,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "group_by_color" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
            {
              "key" : "紅色",
              "doc_count" : 4,
              "color_avg_price" : {
                "value" : 3250.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "長虹",
                    "doc_count" : 3,
                    "brand_avg_price" : {
                      "value" : 1666.6666666666667
                    }
                  },
                  {
                    "key" : "三星",
                    "doc_count" : 1,
                    "brand_avg_price" : {
                      "value" : 8000.0
                    }
                  }
                ]
              }
            },
            {
              "key" : "綠色",
              "doc_count" : 2,
              "color_avg_price" : {
                "value" : 2100.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "TCL",
                    "doc_count" : 1,
                    "brand_avg_price" : {
                      "value" : 1200.0
                    }
                  },
                  {
                    "key" : "小米",
                    "doc_count" : 1,
                    "brand_avg_price" : {
                      "value" : 3000.0
                    }
                  }
                ]
              }
            },
            {
              "key" : "藍色",
              "doc_count" : 2,
              "color_avg_price" : {
                "value" : 2000.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "TCL",
                    "doc_count" : 1,
                    "brand_avg_price" : {
                      "value" : 1500.0
                    }
                  },
                  {
                    "key" : "小米",
                    "doc_count" : 1,
                    "brand_avg_price" : {
                      "value" : 2500.0
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }

    1.5 求出每個顏色的銷售數量,平均價格、最小價格、最大價格、價格總和

    GET /tvs/_search
    {
      "size": 0,
      "aggs": {
        "colors": {
          "terms": {
            "field": "color"
          },
          "aggs": {
            "color_avg_price": {
              "avg": {
                "field": "price"
              }
            },
            "color_min_price": {
              "min": {
                "field": "price"
              }
            },
            "color_max_price": {
              "max": {
                "field": "price"
              }
            },
            "color_sum_price": {
              "sum": {
                "field": "price"
              }
            }
          }
        }
      }
    }

    返回:

    查看代碼
    {
      "took" : 4,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 8,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "colors" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
            {
              "key" : "紅色",
              "doc_count" : 4,
              "color_avg_price" : {
                "value" : 3250.0
              },
              "color_min_price" : {
                "value" : 1000.0
              },
              "color_max_price" : {
                "value" : 8000.0
              },
              "color_sum_price" : {
                "value" : 13000.0
              }
            },
            {
              "key" : "綠色",
              "doc_count" : 2,
              "color_avg_price" : {
                "value" : 2100.0
              },
              "color_min_price" : {
                "value" : 1200.0
              },
              "color_max_price" : {
                "value" : 3000.0
              },
              "color_sum_price" : {
                "value" : 4200.0
              }
            },
            {
              "key" : "藍色",
              "doc_count" : 2,
              "color_avg_price" : {
                "value" : 2000.0
              },
              "color_min_price" : {
                "value" : 1500.0
              },
              "color_max_price" : {
                "value" : 2500.0
              },
              "color_sum_price" : {
                "value" : 4000.0
              }
            }
          ]
        }
      }
    }

    返回結果解析

    • count:bucket,terms,自動就會有一個doc_count,就相當于是count
    • avg:avg aggs,求平均值
    • max:求一個bucket內,指定field值最大的那個數據
    • min:求一個bucket內,指定field值最小的那個數據
    • sum:求一個bucket內,指定field值的總和

    1.6 劃分范圍 histogram(直方圖),求出價格每2000為一個區間,每個區間的銷售總額

    GET /tvs/_search
    {
      "size": 0,
      "aggs": {
        "price": {
          "histogram": {
            "field": "price",
            "interval": 2000
          },
          "aggs": {
            "income": {
              "sum": {
                "field": "price"
              }
            }
          }
        }
      }
    }

    histogram:類似于terms,也是進行bucket分組操作,接收一個field,按照這個field的值的各個范圍區間,進行bucket分組操作

    "histogram": {
        "field": "price",
        "interval": 2000
    }

    interval:2000,劃分范圍,左閉右開區間 ,[0~2000),2000~4000,4000~6000,6000~8000,8000~10000

    bucket有了之后,一樣的,去對每個bucket執行avg,count,sum,max,min,等各種metric操作,聚合分析

    1.7 按照日期分組聚合,求出每個月銷售個數

    參數解析:

    • date_histogram,按照我們指定的某個date類型的日期field,以及日期interval,按照一定的日期間隔,去劃分bucket
    • min_doc_count:即使某個日期interval,2017-01-01~2017-01-31中,一條數據都沒有,那么這個區間也是要返回的,不然默認是會過濾掉這個區間的 extended_bounds,
    • min,max:劃分bucket的時候,會限定在這個起始日期,和截止日期內
    GET /tvs/_search
    {
       "size" : 0,
       "aggs": {
          "date_sales": {
             "date_histogram": {
                "field": "sold_date",
                "interval": "month", 
                "format": "yyyy-MM-dd",
                "min_doc_count" : 0, 
                "extended_bounds" : { 
                    "min" : "2019-01-01",
                    "max" : "2020-12-31"
                }
             }
          }
       }
    }

    返回

    查看代碼
    #! Deprecation: [interval] on [date_histogram] is deprecated, use [fixed_interval] or [calendar_interval] in the future.
    {
      "took" : 11,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 8,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "date_sales" : {
          "buckets" : [
            {
              "key_as_string" : "2019-01-01",
              "key" : 1546300800000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2019-02-01",
              "key" : 1548979200000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2019-03-01",
              "key" : 1551398400000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2019-04-01",
              "key" : 1554076800000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2019-05-01",
              "key" : 1556668800000,
              "doc_count" : 1
            },
            {
              "key_as_string" : "2019-06-01",
              "key" : 1559347200000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2019-07-01",
              "key" : 1561939200000,
              "doc_count" : 1
            },
            {
              "key_as_string" : "2019-08-01",
              "key" : 1564617600000,
              "doc_count" : 1
            },
            {
              "key_as_string" : "2019-09-01",
              "key" : 1567296000000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2019-10-01",
              "key" : 1569888000000,
              "doc_count" : 1
            },
            {
              "key_as_string" : "2019-11-01",
              "key" : 1572566400000,
              "doc_count" : 2
            },
            {
              "key_as_string" : "2019-12-01",
              "key" : 1575158400000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-01-01",
              "key" : 1577836800000,
              "doc_count" : 1
            },
            {
              "key_as_string" : "2020-02-01",
              "key" : 1580515200000,
              "doc_count" : 1
            },
            {
              "key_as_string" : "2020-03-01",
              "key" : 1583020800000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-04-01",
              "key" : 1585699200000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-05-01",
              "key" : 1588291200000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-06-01",
              "key" : 1590969600000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-07-01",
              "key" : 1593561600000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-08-01",
              "key" : 1596240000000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-09-01",
              "key" : 1598918400000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-10-01",
              "key" : 1601510400000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-11-01",
              "key" : 1604188800000,
              "doc_count" : 0
            },
            {
              "key_as_string" : "2020-12-01",
              "key" : 1606780800000,
              "doc_count" : 0
            }
          ]
        }
      }
    }

    注意: 

    #! Deprecation: [interval] on [date_histogram] is deprecated, use [fixed_interval] or [calendar_interval] in the future.

    1.8 統計每季度每個品牌的銷售額,及每季度的銷售總額

    GET /tvs/_search 
    {
      "size": 0,
      "aggs": {
        "group_by_sold_date": {
          "date_histogram": {
            "field": "sold_date",
            "interval": "quarter",
            "format": "yyyy-MM-dd",
            "min_doc_count": 0,
            "extended_bounds": {
              "min": "2019-01-01",
              "max": "2020-12-31"
            }
          },
          "aggs": {
            "group_by_brand": {
              "terms": {
                "field": "brand"
              },
              "aggs": {
                "sum_price": {
                  "sum": {
                    "field": "price"
                  }
                }
              }
            },
            "total_sum_price": {
              "sum": {
                "field": "price"
              }
            }
          }
        }
      }
    }

    返回

    查看代碼
    #! Deprecation: [interval] on [date_histogram] is deprecated, use [fixed_interval] or [calendar_interval] in the future.
    {
      "took" : 3,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 8,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "group_by_sold_date" : {
          "buckets" : [
            {
              "key_as_string" : "2019-01-01",
              "key" : 1546300800000,
              "doc_count" : 0,
              "total_sum_price" : {
                "value" : 0.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [ ]
              }
            },
            {
              "key_as_string" : "2019-04-01",
              "key" : 1554076800000,
              "doc_count" : 1,
              "total_sum_price" : {
                "value" : 3000.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "小米",
                    "doc_count" : 1,
                    "sum_price" : {
                      "value" : 3000.0
                    }
                  }
                ]
              }
            },
            {
              "key_as_string" : "2019-07-01",
              "key" : 1561939200000,
              "doc_count" : 2,
              "total_sum_price" : {
                "value" : 2700.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "TCL",
                    "doc_count" : 2,
                    "sum_price" : {
                      "value" : 2700.0
                    }
                  }
                ]
              }
            },
            {
              "key_as_string" : "2019-10-01",
              "key" : 1569888000000,
              "doc_count" : 3,
              "total_sum_price" : {
                "value" : 5000.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "長虹",
                    "doc_count" : 3,
                    "sum_price" : {
                      "value" : 5000.0
                    }
                  }
                ]
              }
            },
            {
              "key_as_string" : "2020-01-01",
              "key" : 1577836800000,
              "doc_count" : 2,
              "total_sum_price" : {
                "value" : 10500.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "三星",
                    "doc_count" : 1,
                    "sum_price" : {
                      "value" : 8000.0
                    }
                  },
                  {
                    "key" : "小米",
                    "doc_count" : 1,
                    "sum_price" : {
                      "value" : 2500.0
                    }
                  }
                ]
              }
            },
            {
              "key_as_string" : "2020-04-01",
              "key" : 1585699200000,
              "doc_count" : 0,
              "total_sum_price" : {
                "value" : 0.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [ ]
              }
            },
            {
              "key_as_string" : "2020-07-01",
              "key" : 1593561600000,
              "doc_count" : 0,
              "total_sum_price" : {
                "value" : 0.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [ ]
              }
            },
            {
              "key_as_string" : "2020-10-01",
              "key" : 1601510400000,
              "doc_count" : 0,
              "total_sum_price" : {
                "value" : 0.0
              },
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [ ]
              }
            }
          ]
        }
      }
    }

    1.9 搜索與聚合結合,查詢某個品牌按顏色銷量

    搜索與聚合可以結合起來。sql語句如下

    select count(*)
    from tvs
    where brand like "%小米%"
    group by color

    注意:任何的聚合,都必須在搜索出來的結果數據中之行。

    GET /tvs/_search 
    {
      "size": 0,
      "query": {
        "term": {
          "brand": {
            "value": "小米"
          }
        }
      },
      "aggs": {
        "group_by_color": {
          "terms": {
            "field": "color"
          }
        }
      }
    }

    返回

    {
      "took" : 0,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 2,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "group_by_color" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
            {
              "key" : "綠色",
              "doc_count" : 1
            },
            {
              "key" : "藍色",
              "doc_count" : 1
            }
          ]
        }
      }
    }

    1.10 global bucket(全局桶):單個品牌與所有品牌銷量對比

    GET /tvs/_search 
    {
      "size": 0, 
      "query": {
        "term": {
          "brand": {
            "value": "小米"
          }
        }
      },
      "aggs": {
        "single_brand_avg_price": {
          "avg": {
            "field": "price"
          }
        },
        "all": {
          "global": {},
          "aggs": {
            "all_brand_avg_price": {
              "avg": {
                "field": "price"
              }
            }
          }
        }
      }
    }

    返回

    {
      "took" : 61,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 2,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "all" : {
          "doc_count" : 8,
          "all_brand_avg_price" : {
            "value" : 2650.0
          }
        },
        "single_brand_avg_price" : {
          "value" : 2750.0
        }
      }
    }

    返回結果解析:

    • 一個結果,是基于query搜索結果來聚合的;
    • 一個結果,是對所有數據執行聚合的

    1.11 統計價格大于1200的電視平均價格

    注意:單獨使用filter 需加上constant_score

    GET /tvs/_search 
    {
      "size": 0,
      "query": {
        "constant_score": {
          "filter": {
            "range": {
              "price": {
                "gte": 1200
              }
            }
          }
        }
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }

    返回:

    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 7,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "avg_price" : {
          "value" : 2885.714285714286
        }
      }
    }

    1.12 bucket filter:統計品牌最近4年,3年的平均價格

    注意:因為是最近的時間,所以讀者實驗的時候,需根據當前時間來自行設置查詢范圍

    注意下面的區別

    • aggs.filter,針對的是聚合去做的
    • query里面的filter,是全局的,會對所有的數據都有影響
    GET /tvs/_search 
    {
      "size": 0,
      "query": {
        "term": {
          "brand": {
            "value": "小米"
          }
        }
      },
      "aggs": {
        "recent_fouryear": {
          "filter": {
            "range": {
              "sold_date": {
                "gte": "now-4y"
              }
            }
          },
          "aggs": {
            "recent_fouryear_avg_price": {
              "avg": {
                "field": "price"
              }
            }
          }
        },
        "recent_threeyear": {
          "filter": {
            "range": {
              "sold_date": {
                "gte": "now-3y"
              }
            }
          },
          "aggs": {
            "recent_threeyear_avg_price": {
              "avg": {
                "field": "price"
              }
            }
          }
        }
      }
    }

    返回

    {
      "took" : 0,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 2,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "recent_threeyear" : {
          "meta" : { },
          "doc_count" : 2,
          "recent_threeyear_avg_price" : {
            "value" : 2750.0
          }
        },
        "recent_fouryear" : {
          "meta" : { },
          "doc_count" : 2,
          "recent_fouryear_avg_price" : {
            "value" : 2750.0
          }
        }
      }
    }

    1.13 按每種顏色的平均銷售額降序排序

    GET /tvs/_search 
    {
      "size": 0,
      "aggs": {
        "group_by_color": {
          "terms": {
            "field": "color",
            "order": {
              "avg_price": "desc"
            }
          },
          "aggs": {
            "avg_price": {
              "avg": {
                "field": "price"
              }
            }
          }
        }
      }
    }

    返回:

    {
      "took" : 0,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 8,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "group_by_color" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
            {
              "key" : "紅色",
              "doc_count" : 4,
              "avg_price" : {
                "value" : 3250.0
              }
            },
            {
              "key" : "綠色",
              "doc_count" : 2,
              "avg_price" : {
                "value" : 2100.0
              }
            },
            {
              "key" : "藍色",
              "doc_count" : 2,
              "avg_price" : {
                "value" : 2000.0
              }
            }
          ]
        }
      }
    }

    1.14 按每種顏色的每種品牌平均銷售額降序排序

    GET /tvs/_search    
    {
      "size": 0,
      "aggs": {
        "group_by_color": {
          "terms": {
            "field": "color"
          },
          "aggs": {
            "group_by_brand": {
              "terms": {
                "field": "brand",
                "order": {
                  "avg_price": "desc"
                }
              },
              "aggs": {
                "avg_price": {
                  "avg": {
                    "field": "price"
                  }
                }
              }
            }
          }
        }
      }
    }

    返回

    查看代碼
    
    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 8,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "group_by_color" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
            {
              "key" : "紅色",
              "doc_count" : 4,
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "三星",
                    "doc_count" : 1,
                    "avg_price" : {
                      "value" : 8000.0
                    }
                  },
                  {
                    "key" : "長虹",
                    "doc_count" : 3,
                    "avg_price" : {
                      "value" : 1666.6666666666667
                    }
                  }
                ]
              }
            },
            {
              "key" : "綠色",
              "doc_count" : 2,
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "小米",
                    "doc_count" : 1,
                    "avg_price" : {
                      "value" : 3000.0
                    }
                  },
                  {
                    "key" : "TCL",
                    "doc_count" : 1,
                    "avg_price" : {
                      "value" : 1200.0
                    }
                  }
                ]
              }
            },
            {
              "key" : "藍色",
              "doc_count" : 2,
              "group_by_brand" : {
                "doc_count_error_upper_bound" : 0,
                "sum_other_doc_count" : 0,
                "buckets" : [
                  {
                    "key" : "小米",
                    "doc_count" : 1,
                    "avg_price" : {
                      "value" : 2500.0
                    }
                  },
                  {
                    "key" : "TCL",
                    "doc_count" : 1,
                    "avg_price" : {
                      "value" : 1500.0
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }

     

     

    posted @ 2022-05-25 20:03  |舊市拾荒|  閱讀(319)  評論(2編輯  收藏  舉報
    国产美女a做受大片观看