前言:
目前看官们对“es查询索引下的类型”都比较珍视,我们都想要学习一些“es查询索引下的类型”的相关资讯。那么小编在网上搜集了一些关于“es查询索引下的类型””的相关文章,希望小伙伴们能喜欢,朋友们一起来学习一下吧!ES的查询方式可以分为三类:
简单查询
条件查询
聚合查询
数据准备
我们先按照前几篇介绍的插入文档的方法准备一些实验数据,然后再来演示如何实现各类查询。
我们在我们之前创建的rent索引的community类型下面加入如下文档信息。
回忆一下:当时创建的索引及类型如下:
{ "settings":{ "number_of_shards":3, "number_of_replicas":1 }, "mappings":{ "community":{ "properties":{ "communityname":{ "type":"text" }, "city":{ "type":"keyword" }, "age":{ "type":"integer" }, "creationdate":{ "type":"date", "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } } }, "shop":{ } }}
回过头来,我们现在插入一些文档进去。插入的ES的API:
所有文档的插入请求体如下:你可以把这些数据插入到你的ES中,然后try后续的各种查询。
{ "communityname":"万科阳光苑", "city":"上海", "age":10, "creationdate":"2008-01-01 00:00:00"}
{ "communityname":"万科朗润园", "city":"上海", "age":12, "creationdate":"2006-01-01 00:00:00"}
{ "communityname":"万科优诗美地", "city":"上海闵行七宝", "age":19, "creationdate":"1999-01-01 00:00:00"}
{ "communityname":"万科清林径", "city":"上海浦东新区新场镇", "age":6, "creationdate":"2012-01-01 00:00:00"}
{ "communityname":"万科蓝山", "city":"上海浦东曹路", "age":14, "creationdate":"2004-01-01 00:00:00"}
{ "communityname":"万科公园大道", "city":"上海老闵行", "age":3, "creationdate":"2015-01-01 00:00:00"}
{ "communityname":"万科白马花园", "city":"上海莘闵别墅区", "age":15, "creationdate":"2003-01-01 00:00:00"}
{ "communityname":"金地艺境(宝山)", "city":"上海宝山区", "age":6, "creationdate":"2012-01-01 00:00:00"}
{ "communityname":"金地艺境(松江)", "city":"上海松江区", "age":3, "creationdate":"2015-01-01 00:00:00"}
{ "communityname":"金地艺华年", "city":"上海浦东航头", "age":5, "creationdate":"2013-01-01"}
{ "communityname":"金地格林世界", "city":"上海嘉定南翔", "age":7, "creationdate":"2011-01-01"}
{ "communityname":"保利西子湾", "city":"上海松江大学城", "age":10, "creationdate":"2008-01-01"}
{ "communityname":"保利艾庐", "city":"上海浦东新区周浦镇", "age":3, "creationdate":"2015-01-01"}
{ "communityname":"中海悦府", "city":"上海松江泗泾", "age":4, "creationdate":"2014-01-01"}
{ "communityname":"中海万锦城(二期)", "city":"上海闸北不夜城", "age":6, "creationdate":"2012-01-01"}
{ "communityname":"中海紫御豪庭", "city":"上海普陀长征", "age":6, "creationdate":"2012-01-01"}
{ "communityname":"象屿鼎城", "city":"上海浦东川沙", "age":5, "creationdate":"2013-01-01"}
插入结果如下:我们通过head插件页面的数据查询查看
(本文为oschina博主happybks的博文:)
简单查询
简单查询其实我们已经演示过。就是按照文档_id,通过ES的RESTFUL API 的GET请求来进行文档查询。
例如,我这里插入了租赁房屋rent索引下的小区community类型中的文档万科阳光苑的文档_id为AWLY7wnkoILHeA4gRvV8
那么我们请求get请求下面的url来进行文档简单查询
条件查询
与简单查询不同的是:
条件查询请求的协议方法是POST方法。
条件查询需要使用_search关键字。
条件查询需要在请求体内将条件写在一个json体内。
查询所有
在查询的请求体内的查询条件json中,都是用query关键词的。(请求url中的用的额是_search关键字)
查询符合条件的所有数据,需要用match_all
这里我们查询所有的,即不设置筛选条件,那么就用空的花括号{}
POST请求
请求体raw,类型JSON
{ "query":{ "match_all":{} }}
查询结果:total刚好18个,就是我们刚才插入的18个全部文档。
我们看一下返回结果的几个关键属性。took代表查询所耗费的毫秒数。hits代表响应的全部结果。
hits中的hits返回的是10条结果。是的,虽然我们查询到18条,但是这里默认只会列出10条。
{ "took": 125, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 18, "max_score": 1, "hits": [ { "_index": "rent", "_type": "community", "_id": "AWLY7wnkoILHeA4gRvV8", "_score": 1, "_source": { "communityname": "万科阳光苑", "city": "上海", "age": 10, "creationdate": "2008-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZDK3-oILHeA4gRvWA", "_score": 1, "_source": { "communityname": "万科清林径", "city": "上海浦东新区新场镇", "age": 6, "creationdate": "2012-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZD_9YoILHeA4gRvWC", "_score": 1, "_source": { "communityname": "万科公园大道", "city": "上海老闵行", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFA5EoILHeA4gRvWF", "_score": 1, "_source": { "communityname": "金地艺境(松江)", "city": "上海松江区", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEXNioILHeA4gRvWD", "_score": 1, "_source": { "communityname": "万科白马花园", "city": "上海莘闵别墅区", "age": 15, "creationdate": "2003-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZGp3aoILHeA4gRvWM", "_score": 1, "_source": { "communityname": "中海万锦城(二期)", "city": "上海闸北不夜城", "age": 6, "creationdate": "2012-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZC1HYoILHeA4gRvV_", "_score": 1, "_source": { "communityname": "万科优诗美地", "city": "上海闵行七宝", "age": 19, "creationdate": "1999-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZF4FAoILHeA4gRvWI", "_score": 1, "_source": { "communityname": "保利西子湾", "city": "上海松江大学城", "age": 10, "creationdate": "2008-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFmeqoILHeA4gRvWH", "_score": 1, "_source": { "communityname": "金地格林世界", "city": "上海嘉定南翔", "age": 7, "creationdate": "2011-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEy0foILHeA4gRvWE", "_score": 1, "_source": { "communityname": "金地艺境(宝山)", "city": "上海宝山区", "age": 6, "creationdate": "2012-01-01 00:00:00" } } ] }}那么我们怎设定从哪里返回、返回多少条呢?
我们需要修改一下查询条件:
比如我们希望吧所有18条结果都返回显示在hits中。
条件需写成:
{ "query":{ "match_all":{} }, "from":0, "size":18}
查询结果:
{ "took": 9, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 18, "max_score": 1, "hits": [ { "_index": "rent", "_type": "community", "_id": "AWLY7wnkoILHeA4gRvV8", "_score": 1, "_source": { "communityname": "万科阳光苑", "city": "上海", "age": 10, "creationdate": "2008-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZDK3-oILHeA4gRvWA", "_score": 1, "_source": { "communityname": "万科清林径", "city": "上海浦东新区新场镇", "age": 6, "creationdate": "2012-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZD_9YoILHeA4gRvWC", "_score": 1, "_source": { "communityname": "万科公园大道", "city": "上海老闵行", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFA5EoILHeA4gRvWF", "_score": 1, "_source": { "communityname": "金地艺境(松江)", "city": "上海松江区", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEXNioILHeA4gRvWD", "_score": 1, "_source": { "communityname": "万科白马花园", "city": "上海莘闵别墅区", "age": 15, "creationdate": "2003-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZGp3aoILHeA4gRvWM", "_score": 1, "_source": { "communityname": "中海万锦城(二期)", "city": "上海闸北不夜城", "age": 6, "creationdate": "2012-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZC1HYoILHeA4gRvV_", "_score": 1, "_source": { "communityname": "万科优诗美地", "city": "上海闵行七宝", "age": 19, "creationdate": "1999-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZF4FAoILHeA4gRvWI", "_score": 1, "_source": { "communityname": "保利西子湾", "city": "上海松江大学城", "age": 10, "creationdate": "2008-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFmeqoILHeA4gRvWH", "_score": 1, "_source": { "communityname": "金地格林世界", "city": "上海嘉定南翔", "age": 7, "creationdate": "2011-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEy0foILHeA4gRvWE", "_score": 1, "_source": { "communityname": "金地艺境(宝山)", "city": "上海宝山区", "age": 6, "creationdate": "2012-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZHsN6oILHeA4gRvWO", "_score": 1, "_source": { "communityname": "象屿鼎城", "city": "上海浦东川沙", "age": 5, "creationdate": "2013-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZGbCzoILHeA4gRvWL", "_score": 1, "_source": { "communityname": "中海悦府", "city": "上海松江泗泾", "age": 4, "creationdate": "2014-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLDhHMpoILHeA4gRvV7", "_score": 1, "_source": { "communityname": "世茂滨江花园", "city": "上海", "age": 9, "creationdate": "2009-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZCaoSoILHeA4gRvV-", "_score": 1, "_source": { "communityname": "万科朗润园", "city": "上海", "age": 12, "creationdate": "2006-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZDcK7oILHeA4gRvWB", "_score": 1, "_source": { "communityname": "万科蓝山", "city": "上海浦东曹路", "age": 14, "creationdate": "2004-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFV2doILHeA4gRvWG", "_score": 1, "_source": { "communityname": "金地艺华年", "city": "上海浦东航头", "age": 5, "creationdate": "2013-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZGGD2oILHeA4gRvWJ", "_score": 1, "_source": { "communityname": "保利艾庐", "city": "上海浦东新区周浦镇", "age": 3, "creationdate": "2015-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZHR2loILHeA4gRvWN", "_score": 1, "_source": { "communityname": "中海紫御豪庭", "city": "上海普陀长征", "age": 6, "creationdate": "2012-01-01" } } ] }}
当然我们如果只需要从特定位置开始,特定若干条,可以通过from和size两个条件属性关键词中设定。
注意:from是从0开始的,例如我要查询第一条开始的1条数据:
{ "query":{ "match_all":{} }, "from":0, "size":1}
结果:
{ "took": 2, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 18, "max_score": 1, "hits": [ { "_index": "rent", "_type": "community", "_id": "AWLY7wnkoILHeA4gRvV8", "_score": 1, "_source": { "communityname": "万科阳光苑", "city": "上海", "age": 10, "creationdate": "2008-01-01 00:00:00" } } ] }}
如何进行关键词查询?
文本类型属性条件匹配
需要将关键词match_all改成match。
POST
{ "query":{ "match":{ "communityname":"万科" } }}
我们查询小区名字为万科有关的所有小区文档:
结果发现,我们的确查找到了所有万科有关的小区的文档数据。但是有一个“中海万锦城”居然也被查询到了,这是因为有个“万”字。这是因为两点:
一个是我们条件中的communityname是一个text类型,是按照一般文本进行匹配查询的;
另一个原因是使用match关键字进行查询,不等同于sql里的条件查询,而是一个个字或者说分词的匹配查询,在汉字里,我们默认一个字为一个匹配的分词,所以查询到的结果包含了单字匹配的结果。
好上面这个我们先放一下,看一下匹配到额结果:
hits中返回的结果列表的排序顺序默认是按照score的倒排顺序排列的。
{ "took": 191, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 8, "max_score": 2.5742233, "hits": [ { "_index": "rent", "_type": "community", "_id": "AWLZDcK7oILHeA4gRvWB", "_score": 2.5742233, "_source": { "communityname": "万科蓝山", "city": "上海浦东曹路", "age": 14, "creationdate": "2004-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZCaoSoILHeA4gRvV-", "_score": 2.0816076, "_source": { "communityname": "万科朗润园", "city": "上海", "age": 12, "creationdate": "2006-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEXNioILHeA4gRvWD", "_score": 1.82076, "_source": { "communityname": "万科白马花园", "city": "上海莘闵别墅区", "age": 15, "creationdate": "2003-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZC1HYoILHeA4gRvV_", "_score": 1.82076, "_source": { "communityname": "万科优诗美地", "city": "上海闵行七宝", "age": 19, "creationdate": "1999-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZGp3aoILHeA4gRvWM", "_score": 0.7981695, "_source": { "communityname": "中海万锦城(二期)", "city": "上海闸北不夜城", "age": 6, "creationdate": "2012-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLY7wnkoILHeA4gRvV8", "_score": 0.72827405, "_source": { "communityname": "万科阳光苑", "city": "上海", "age": 10, "creationdate": "2008-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZDK3-oILHeA4gRvWA", "_score": 0.72827405, "_source": { "communityname": "万科清林径", "city": "上海浦东新区新场镇", "age": 6, "creationdate": "2012-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZD_9YoILHeA4gRvWC", "_score": 0.63701355, "_source": { "communityname": "万科公园大道", "city": "上海老闵行", "age": 3, "creationdate": "2015-01-01 00:00:00" } } ] }}
关键字类型属性条件匹配
我们再按照city地点属性来进行查询:POST
请求体条件:
{ "query":{ "match":{ "city":"浦东新区" } }}
返回的结果是什么都没有:
原因是我们索引结构中,city属性是一个keyword类型,需要把整个按照关键字进行匹配,而不是按照文本来进行检索查询。
{ "took": 131, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 0, "max_score": null, "hits": [] }}
keyword类型的属性作为match查询条件时,需要完全匹配对应上才可以。
如,我们请求:
{ "query":{ "match":{ "city":"上海浦东新区周浦镇" } }}
返回结果:
{ "took": 29, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 1.2039728, "hits": [ { "_index": "rent", "_type": "community", "_id": "AWLZGGD2oILHeA4gRvWJ", "_score": 1.2039728, "_source": { "communityname": "保利艾庐", "city": "上海浦东新区周浦镇", "age": 3, "creationdate": "2015-01-01" } } ] }}
排序
前面我们说了,那个查询小区名字匹配“万科”的结果是按照score的倒排顺序排列的。如果我们希望按照我们特定的属性字段来排序,需要用sort关键字来指定。
POST
请求体条件:
{ "query":{ "match":{ "communityname":"万科" } }, "sort":[ {"creationdate":{"order":"desc"}} ]}
查询结果:
{ "took": 322, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 8, "max_score": null, "hits": [ { "_index": "rent", "_type": "community", "_id": "AWLZD_9YoILHeA4gRvWC", "_score": null, "_source": { "communityname": "万科公园大道", "city": "上海老闵行", "age": 3, "creationdate": "2015-01-01 00:00:00" }, "sort": [ 1420070400000 ] }, { "_index": "rent", "_type": "community", "_id": "AWLZDK3-oILHeA4gRvWA", "_score": null, "_source": { "communityname": "万科清林径", "city": "上海浦东新区新场镇", "age": 6, "creationdate": "2012-01-01 00:00:00" }, "sort": [ 1325376000000 ] }, { "_index": "rent", "_type": "community", "_id": "AWLZGp3aoILHeA4gRvWM", "_score": null, "_source": { "communityname": "中海万锦城(二期)", "city": "上海闸北不夜城", "age": 6, "creationdate": "2012-01-01" }, "sort": [ 1325376000000 ] }, { "_index": "rent", "_type": "community", "_id": "AWLY7wnkoILHeA4gRvV8", "_score": null, "_source": { "communityname": "万科阳光苑", "city": "上海", "age": 10, "creationdate": "2008-01-01 00:00:00" }, "sort": [ 1199145600000 ] }, { "_index": "rent", "_type": "community", "_id": "AWLZCaoSoILHeA4gRvV-", "_score": null, "_source": { "communityname": "万科朗润园", "city": "上海", "age": 12, "creationdate": "2006-01-01 00:00:00" }, "sort": [ 1136073600000 ] }, { "_index": "rent", "_type": "community", "_id": "AWLZDcK7oILHeA4gRvWB", "_score": null, "_source": { "communityname": "万科蓝山", "city": "上海浦东曹路", "age": 14, "creationdate": "2004-01-01 00:00:00" }, "sort": [ 1072915200000 ] }, { "_index": "rent", "_type": "community", "_id": "AWLZEXNioILHeA4gRvWD", "_score": null, "_source": { "communityname": "万科白马花园", "city": "上海莘闵别墅区", "age": 15, "creationdate": "2003-01-01 00:00:00" }, "sort": [ 1041379200000 ] }, { "_index": "rent", "_type": "community", "_id": "AWLZC1HYoILHeA4gRvV_", "_score": null, "_source": { "communityname": "万科优诗美地", "city": "上海闵行七宝", "age": 19, "creationdate": "1999-01-01 00:00:00" }, "sort": [ 915148800000 ] } ] }}
聚合查询
aggs是聚合查询的关键词。这里我想把所有的小区按照它们的房龄进行聚合。
这里给我们的聚合条件取一个名字my_group_by_age。这个名字是自定义的,你可以随便起。
然后我们使用terms关键词,指明我们需要按照某个字段进行聚合。指定字段需要用到filed关键词。
然后查询:
POST
{ "aggs":{ "my_group_by_age":{ "terms":{ "field":"age" } } }}
查询结果:
我们可以看到结果就送中返回了涉及的文档个数18个,以及默认显示10个文档。另外将聚合的结果也给出了。key代表我们请求条件中的terms的field关键词对应设置的字段。我们可以看到不同age房龄的小区文档个数。
{ "took": 568, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 18, "max_score": 1, "hits": [ { "_index": "rent", "_type": "community", "_id": "AWLY7wnkoILHeA4gRvV8", "_score": 1, "_source": { "communityname": "万科阳光苑", "city": "上海", "age": 10, "creationdate": "2008-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZDK3-oILHeA4gRvWA", "_score": 1, "_source": { "communityname": "万科清林径", "city": "上海浦东新区新场镇", "age": 6, "creationdate": "2012-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZD_9YoILHeA4gRvWC", "_score": 1, "_source": { "communityname": "万科公园大道", "city": "上海老闵行", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFA5EoILHeA4gRvWF", "_score": 1, "_source": { "communityname": "金地艺境(松江)", "city": "上海松江区", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEXNioILHeA4gRvWD", "_score": 1, "_source": { "communityname": "万科白马花园", "city": "上海莘闵别墅区", "age": 15, "creationdate": "2003-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZGp3aoILHeA4gRvWM", "_score": 1, "_source": { "communityname": "中海万锦城(二期)", "city": "上海闸北不夜城", "age": 6, "creationdate": "2012-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZC1HYoILHeA4gRvV_", "_score": 1, "_source": { "communityname": "万科优诗美地", "city": "上海闵行七宝", "age": 19, "creationdate": "1999-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZF4FAoILHeA4gRvWI", "_score": 1, "_source": { "communityname": "保利西子湾", "city": "上海松江大学城", "age": 10, "creationdate": "2008-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFmeqoILHeA4gRvWH", "_score": 1, "_source": { "communityname": "金地格林世界", "city": "上海嘉定南翔", "age": 7, "creationdate": "2011-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEy0foILHeA4gRvWE", "_score": 1, "_source": { "communityname": "金地艺境(宝山)", "city": "上海宝山区", "age": 6, "creationdate": "2012-01-01 00:00:00" } } ] }, "aggregations": { "my_group_by_age": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 1, "buckets": [ { "key": 6, "doc_count": 4 }, { "key": 3, "doc_count": 3 }, { "key": 5, "doc_count": 2 }, { "key": 10, "doc_count": 2 }, { "key": 4, "doc_count": 1 }, { "key": 7, "doc_count": 1 }, { "key": 9, "doc_count": 1 }, { "key": 12, "doc_count": 1 }, { "key": 14, "doc_count": 1 }, { "key": 15, "doc_count": 1 } ] } }}
多个分组聚合
以上是单个分组聚合,还可以进行多个分组聚合。
我们尝试追加一个聚合条件,按照建造时间来进行聚合:
{ "aggs":{ "my_group_by_age":{ "terms":{ "field":"age" } }, "my_group_by_creationdate":{ "terms":{ "field":"creationdate" } } }}
结果:
这里值得注意的是,建造时间creationdate是一个date类型,无论你在录入这条文档时用的是什么格式,这里聚合是都是以这个date对应的时间戳数值作为聚合的key,不过结果里会在附加一个key_as_string把date对应的日期格式打印出来。我们发现之前那几个没时分秒的日期也被转换成了时间戳,key_as_string显示为年月日时分秒的格式。
{ "took": 530, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 18, "max_score": 1, "hits": [ { "_index": "rent", "_type": "community", "_id": "AWLY7wnkoILHeA4gRvV8", "_score": 1, "_source": { "communityname": "万科阳光苑", "city": "上海", "age": 10, "creationdate": "2008-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZDK3-oILHeA4gRvWA", "_score": 1, "_source": { "communityname": "万科清林径", "city": "上海浦东新区新场镇", "age": 6, "creationdate": "2012-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZD_9YoILHeA4gRvWC", "_score": 1, "_source": { "communityname": "万科公园大道", "city": "上海老闵行", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFA5EoILHeA4gRvWF", "_score": 1, "_source": { "communityname": "金地艺境(松江)", "city": "上海松江区", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEXNioILHeA4gRvWD", "_score": 1, "_source": { "communityname": "万科白马花园", "city": "上海莘闵别墅区", "age": 15, "creationdate": "2003-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZGp3aoILHeA4gRvWM", "_score": 1, "_source": { "communityname": "中海万锦城(二期)", "city": "上海闸北不夜城", "age": 6, "creationdate": "2012-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZC1HYoILHeA4gRvV_", "_score": 1, "_source": { "communityname": "万科优诗美地", "city": "上海闵行七宝", "age": 19, "creationdate": "1999-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZF4FAoILHeA4gRvWI", "_score": 1, "_source": { "communityname": "保利西子湾", "city": "上海松江大学城", "age": 10, "creationdate": "2008-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFmeqoILHeA4gRvWH", "_score": 1, "_source": { "communityname": "金地格林世界", "city": "上海嘉定南翔", "age": 7, "creationdate": "2011-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEy0foILHeA4gRvWE", "_score": 1, "_source": { "communityname": "金地艺境(宝山)", "city": "上海宝山区", "age": 6, "creationdate": "2012-01-01 00:00:00" } } ] }, "aggregations": { "my_group_by_creationdate": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 1, "buckets": [ { "key": 1325376000000, "key_as_string": "2012-01-01 00:00:00", "doc_count": 4 }, { "key": 1420070400000, "key_as_string": "2015-01-01 00:00:00", "doc_count": 3 }, { "key": 1199145600000, "key_as_string": "2008-01-01 00:00:00", "doc_count": 2 }, { "key": 1356998400000, "key_as_string": "2013-01-01 00:00:00", "doc_count": 2 }, { "key": 915148800000, "key_as_string": "1999-01-01 00:00:00", "doc_count": 1 }, { "key": 1041379200000, "key_as_string": "2003-01-01 00:00:00", "doc_count": 1 }, { "key": 1072915200000, "key_as_string": "2004-01-01 00:00:00", "doc_count": 1 }, { "key": 1136073600000, "key_as_string": "2006-01-01 00:00:00", "doc_count": 1 }, { "key": 1230768000000, "key_as_string": "2009-01-01 00:00:00", "doc_count": 1 }, { "key": 1293840000000, "key_as_string": "2011-01-01 00:00:00", "doc_count": 1 } ] }, "my_group_by_age": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 1, "buckets": [ { "key": 6, "doc_count": 4 }, { "key": 3, "doc_count": 3 }, { "key": 5, "doc_count": 2 }, { "key": 10, "doc_count": 2 }, { "key": 4, "doc_count": 1 }, { "key": 7, "doc_count": 1 }, { "key": 9, "doc_count": 1 }, { "key": 12, "doc_count": 1 }, { "key": 14, "doc_count": 1 }, { "key": 15, "doc_count": 1 } ] } }}
其他聚合操作
stats 各类聚合统计计算各类聚合信息。包含count、max、min、avg等。
话不多说,我们来对房龄age进行聚合统计。
请求:
POST
{ "aggs":{ "my_stats_age":{ "stats":{ "field":"age" } } }}
查询结果:我们可以看到房龄统计了总共count=18个文档,其中最大max=19,最小房龄min=3,平均房龄avg=7.944444444444445
{ "took": 133, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 18, "max_score": 1, "hits": [ { "_index": "rent", "_type": "community", "_id": "AWLY7wnkoILHeA4gRvV8", "_score": 1, "_source": { "communityname": "万科阳光苑", "city": "上海", "age": 10, "creationdate": "2008-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZDK3-oILHeA4gRvWA", "_score": 1, "_source": { "communityname": "万科清林径", "city": "上海浦东新区新场镇", "age": 6, "creationdate": "2012-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZD_9YoILHeA4gRvWC", "_score": 1, "_source": { "communityname": "万科公园大道", "city": "上海老闵行", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFA5EoILHeA4gRvWF", "_score": 1, "_source": { "communityname": "金地艺境(松江)", "city": "上海松江区", "age": 3, "creationdate": "2015-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEXNioILHeA4gRvWD", "_score": 1, "_source": { "communityname": "万科白马花园", "city": "上海莘闵别墅区", "age": 15, "creationdate": "2003-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZGp3aoILHeA4gRvWM", "_score": 1, "_source": { "communityname": "中海万锦城(二期)", "city": "上海闸北不夜城", "age": 6, "creationdate": "2012-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZC1HYoILHeA4gRvV_", "_score": 1, "_source": { "communityname": "万科优诗美地", "city": "上海闵行七宝", "age": 19, "creationdate": "1999-01-01 00:00:00" } }, { "_index": "rent", "_type": "community", "_id": "AWLZF4FAoILHeA4gRvWI", "_score": 1, "_source": { "communityname": "保利西子湾", "city": "上海松江大学城", "age": 10, "creationdate": "2008-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZFmeqoILHeA4gRvWH", "_score": 1, "_source": { "communityname": "金地格林世界", "city": "上海嘉定南翔", "age": 7, "creationdate": "2011-01-01" } }, { "_index": "rent", "_type": "community", "_id": "AWLZEy0foILHeA4gRvWE", "_score": 1, "_source": { "communityname": "金地艺境(宝山)", "city": "上海宝山区", "age": 6, "creationdate": "2012-01-01 00:00:00" } } ] }, "aggregations": { "my_stats_age": { "count": 18, "min": 3, "max": 19, "avg": 7.944444444444445, "sum": 143 } }}
标签: #es查询索引下的类型 #rawquery