Elasticsearch聚合查询一
作者:ydw
地点:武汉
联系方式:hyl9900208@163.com
聚合与搜索的概念
通俗的说:搜索是查找某些具体的文档.然而聚合就是对这些搜索到的文档进行统计.例如:
(你的es数据里面记录的都是一些关于针的数据)
- 针的平均长度是多少?
- 按照针的制造商来分组,针的长度中位值是多少?
- 每个月加入到某地区中的针有多少?
上面这些问题就是数据的聚合.聚合还可以有更加细致的问题:
- 最受欢迎的针的制造商是什么?
- 在数据中是否有异常的针?
聚合可以计算很多我们需要的数据,这些数据统计在关系行数据中的计算可能要花很长的时间,但是在Elasticsearch中,虽然这个和实现查询的功能不同,但是他们使用相同的数据结构,它可以很快的速度就能把这些数据计算出来,就和查询的速度几乎是一样的,而且这些数据结果还是实时的.这个就是Elasticsearch用得比较广泛的原因之一.
高阶概念
- Buckets(桶/集合):满足特定条件的文档的集合
- Metrics(指标):对桶内的文档进行统计计算(例如最小值,求和,最大值等).
举例说明—关于汽车数据的相关聚合(Index=cars;type=transactions)
- 第一步添加创建相关的数据
POST /cars/transactions/_bulk
{ "index": {}}
{ "price" : 10000, "color" : "red", "make" : "honda", "sold" : "2014-10-28" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 30000, "color" : "green", "make" : "ford", "sold" : "2014-05-18" }
{ "index": {}}
{ "price" : 15000, "color" : "blue", "make" : "toyota", "sold" : "2014-07-02" }
{ "index": {}}
{ "price" : 12000, "color" : "green", "make" : "toyota", "sold" : "2014-08-19" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 80000, "color" : "red", "make" : "bmw", "sold" : "2014-01-01" }
{ "index": {}}
{ "price" : 25000, "color" : "blue", "make" : "ford", "sold" : "2014-02-12" }
注意点:官方文档说明,如何设置fildData.
Fielddata is disabled on text fields by default. Set fielddata=true on