elasticsearch 聚合_ElasticSearch笔记系列——简单查询、条件查询、聚合查询

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:http://localhost:9200/rent/community/

f624ee39a217d533d5c3d958a4adc14c.png

所有文档的插入请求体如下:你可以把这些数据插入到你的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插件页面的数据查询查看

f921a45815d699fb415d3c6bf28d2511.png

(本文为oschina博主happybks的博文:https://my.oschina.net/happyBKs/blog/1798778)

简单查询

简单查询其实我们已经演示过。就是按照文档_id,通过ES的RESTFUL API 的GET请求来进行文档查询。

例如,我这里插入了租赁房屋rent索引下的小区community类型中的文档万科阳光苑的文档_id为AWLY7wnkoILHeA4gRvV8

那么我们请求get请求下面的url来进行文档简单查询

http://localhost:9200/rent/community/AWLY7wnkoILHeA4gRvV8

52e610a1b0b38519fa95a831cc2e6596.png

条件查询

与简单查询不同的是:

条件查询请求的协议方法是POST方法。

条件查询需要使用_search关键字。

条件查询需要在请求体内将条件写在一个json体内。

查询所有

在查询的请求体内的查询条件json中,都是用query关键词的。(请求url中的用的额是_search关键字)

查询符合条件的所有数据,需要用match_all

这里我们查询所有的,即不设置筛选条件,那么就用空的花括号{}

POST请求http://localhost:9200/rent/community/_search

请求体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 http://localhost:9200/rent/community/_search

{"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 http://localhost:9200/rent/community/_search

请求体条件:

{"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 http://localhost:9200/rent/community/_search

请求体条件:

{"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 http://localhost:9200/rent/community/_search

{"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 http://localhost:9200/rent/community/_search

{"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        }    }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值