1. 程式人生 > >ElasticSearch6.2.4(12)——aggregation淺解

ElasticSearch6.2.4(12)——aggregation淺解

案例:

PUT /tvs
{
	"mappings": {
		"sales": {
			"properties": {
				"price": {
					"type": "long"
				},
				"color": {
					"type": "keyword"
				},
				"brand": {
					"type": "keyword"
				},
				"sold_date": {
					"type": "date"
				}
			}
		}
	}
}
POST /tvs/sales/_bulk
{ "index": {}}
{ "price" : 1000, "color" : "紅色", "brand" : "長虹", "sold_date" : "2016-10-28" }
{ "index": {}}
{ "price" : 2000, "color" : "紅色", "brand" : "長虹", "sold_date" : "2016-11-05" }
{ "index": {}}
{ "price" : 3000, "color" : "綠色", "brand" : "小米", "sold_date" : "2016-05-18" }
{ "index": {}}
{ "price" : 1500, "color" : "藍色", "brand" : "TCL", "sold_date" : "2016-07-02" }
{ "index": {}}
{ "price" : 1200, "color" : "綠色", "brand" : "TCL", "sold_date" : "2016-08-19" }
{ "index": {}}
{ "price" : 2000, "color" : "紅色", "brand" : "長虹", "sold_date" : "2016-11-05" }
{ "index": {}}
{ "price" : 8000, "color" : "紅色", "brand" : "三星", "sold_date" : "2017-01-01" }
{ "index": {}}
{ "price" : 2500, "color" : "藍色", "brand" : "小米", "sold_date" : "2017-02-12" }

1.以顏色來分組

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

2.統計每個顏色電視的平均價格

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

3.從顏色到品牌進行下鑽分析,每種顏色的平均價格,以及找到每種顏色每個品牌的平均價格

GET /tvs/sales/_search
{
  "size": 0,
  "aggs": {
    "color_sale": {
      "terms": {
        "field": "color"
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        },
        "group_by_brand":{
          "terms": {
            "field": "brand"
          },
          "aggs": {
            "brand_avg_color": {
              "avg": {
                "field": "price"
              }
            }
          }
        }
      }
    }
  }
}

4.統計每種顏色電視最大,最小,平均,總價格

GET /tvs/sales/_search
{
  "size": 0,
  "aggs": {
    "color_sale": {
      "terms": {
        "field": "color"
      },
      "aggs": {
        "min_price": {
          "min": {
            "field": "price"
          }
        },
        "max_price": {
          "max": {
            "field": "price"
          }
        },
        "sum_price": {
          "min": {
            "field": "price"
          }
        },
        "avg_price": {
          "min": {
            "field": "price"
          }
        }
      }
    }
  }
}

5.以價格2000為區間統計總價格

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

6以月為單位進行統計總價格

interval:區間段

format:日期格式

min_doc_count:預設值

entended_bounds:裡面是範圍

GET /tvs/sales/_search
{
  "size": 0,
  "aggs": {
    "group_by_date": {
      "date_histogram": {
        "field": "sold_date",
        "interval": "month",
        "format": "yyyy-MM-dd",
        "min_doc_count": 0,
        "extended_bounds": {
          "min": "2016-01-01",
          "max": "2017-01-01"
        }
      },
      "aggs": {
        "sum_price": {
          "sum": {
            "field": "price"
          }
        }
      }
    }
  }
}

7.搜尋小米品牌有多少種顏色

GET /tvs/sales/_search
{
  "size": 0,
  "query": {
    "match": {
      "brand": "小米"
    }
  },
  "aggs": {
    "group_bt_color": {
      "terms": {
        "field": "color"
      }
    }
  }
}

8.單個品牌的平均價格和總價格進行比較

GET /tvs/sales/_search
{
  "size": 0,
  "query": {
    "match": {
      "brand": "小米"
    }
  },
  "aggs": {
    "group_bt_color": {
      "avg": {
        "field": "price"
      }
    },
    "all":{
      "global": {},
      "aggs": {
        "all_avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

9.獲取價格大於1200的平均價格

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

10.統計最近一年,兩年,三年的總銷售價格(年用y,月用M,天用d)

GET /tvs/sales/_search
{
  "size": 0,
  "aggs": {
    "last_1y": {
      "filter": {
        "range": {
          "sold_date": {
            "gte": "now-1y"
          }
        }
      },
      "aggs": {
        "sum_price":{
          "sum": {
            "field": "price"
          }
        }
      }
    },
    "last_2y": {
      "filter": {
        "range": {
          "sold_date": {
            "gte": "now-2y"
          }
        }
      },
      "aggs": {
        "sum_price":{
          "sum": {
            "field": "price"
          }
        }
      }
    },
    "last_3y": {
      "filter": {
        "range": {
          "sold_date": {
            "gte": "now-3y"
          }
        }
      },
      "aggs": {
        "sum_price":{
          "sum": {
            "field": "price"
          }
        }
      }
    }
  }
}

11.按顏色分組,並且按平均價格排序

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