龙空技术网

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

IT男的秘密 871

前言:

目前看官们对“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