es语法详解

ads

简介

ElasticSearch 是基于Lucene的一个搜索引擎,在大数据业务中用处极其广泛。一般在生产中我们一般采用ES+Hbase来处理实际数据查询以应对大数量、高频率查询的场景。在一些企业制定化需求中有很多特殊的场景,需要我们去聚合数据来满足业务需求,如sum、avg、value_count、max、min等指标聚合,terms、histogram、date_histogram、range等桶聚合函数。

聚合解析

1、桶分组

ES进行聚合前需要对目标数据进行分组操作,也就是官方所谓的聚合桶,桶亦是组的意思。目前ES支持四种聚合桶算法:

1.1 terms聚合

terms聚合就如同MYSQL中的GROUP BY一般,就是对目标数据分组

1.2 histogram聚合

histogram聚合就是间距分组,比如按照数量 10、20、30每次间距10进行分组

1.3 date_histogram聚合

date_histogram聚合是用户日期格式数据间距分组,比如日期 month、day等进行分组

1.4 range分组

range分组就是按照范围进行分组,如果数量100-200,200-400分别为多个组

2、指标聚合

指标聚合就是对文档的计算方式,也就是我们常说的计算规则,比如SUM、AVG、VALUE_COUNT、MAX、MIN等计算方式。需要注意的是 Cardinality 是对分组字段去重总和。

聚合格式

{  "aggregations" : {    "<aggregation_name>" : {        "<aggregation_type>" : {            <aggregation_body>        }        [,"aggregations" : { [<sub_aggregation>] } ]// 嵌套聚合查询,支持多层嵌套    }    [,"<aggregation_name_2>" : { ... } ]* // 多个聚合查询,每个聚合查询取不同的名字  }}

说明:

  • aggregations - 代表聚合查询语句,可以简写为aggs

  • <aggregation_name> - 代表一个聚合计算的名字,可以随意命名,因为ES支持一次进行多次统计分析查询,后面需要通过这个名字在查询结果中找到我们想要的计算结果。

  • <aggregation_type> - 聚合类型,代表我们想要怎么统计数据,主要有两大类聚合类型,桶聚合和指标聚合,这两类聚合又包括多种聚合类型,例如:指标聚合:sum、avg, 桶聚合:terms、date histogram等等。

  • <aggregation_body> - 聚合类型的参数,选择不同的聚合类型,有不同的参数。

  • aggregation_name_2 - 代表其他聚合计算的名字,意思就是可以一次进行多种类型的统计。


小试牛刀

我们通过一个综合例子对ES聚合语法进行演示

为简化演示步骤便于查看测试脚本,我们采用kibana进行演示

1、创建测试索引和测试数据

#创建索引PUT aggs_test#设置属性PUT aggs_test/_mapping{  "properties":{    "title":{      "type":"text"     },    "number":{      "type":"long"     },    "createDate":{      "type" : "date",      "format" : "date_optional_time"    }  }}#新增测试数据 POST aggs_test/_doc/1{  "title":"苹果",  "number": 100,  "createDate": "2021-11-10T15:55:53+08:00"}
POST aggs_test/_doc/2{ "title":"梨子", "number": 50, "createDate": "2021-11-20T15:55:53+08:00"}
POST aggs_test/_doc/3{ "title":"香蕉", "number": 150, "createDate": "2021-11-22T15:55:53+08:00"}

POST aggs_test/_doc/4{ "title":"橘子", "number": 50, "createDate": "2021-11-25T15:55:53+08:00"}

2、获取测试数据

GET aggs_test/_search{  }


3、将桶聚合和指标聚合同时测试,我们可以多个聚合查询封装为一个测试查询语句

注意:复制测试语句请去除注释(//及其后面文字均为注释),包含注释语法是不正确的。

#aggs查询数据GET aggs_test/_search{  "size":0,  "aggs": {    "terms_number": {//普通分组      "terms": {        "field": "number",        "order": {//分组和排序          "_key": "desc"        },        "size": 2//分组后条数      }    },    "his_number": {//间距分组      "histogram": {        "field": "number",        "interval": 20      }    },     "range_number": {//范围分组        "range": {          "field": "number",          "ranges": [            {              "from": 50,              "to": 100            },{              "from": 100,              "to": 150            }          ]        }    },    "date_his":{//日期间隔分组      "date_histogram": {        "field": "createDate",        "interval": "day",        "time_zone":"+08:00",        "min_doc_count": 0,        "format" : "yyyy-MM-dd"      }    },    "avg_number":{//平均值      "avg": {        "field": "number"      }    },    "sum_number":{//求和      "sum": {        "field": "number"      }    },    "max_number":{//最大值      "max": {        "field": "number"      }    },    "min_number":{//最小值      "min": {        "field": "number"      }    },    "count_number":{//总条数      "value_count": {        "field": "number"      }    }  }}

4、查看测试结果

{  "took" : 3,  "timed_out" : false,  "_shards" : {    "total" : 1,    "successful" : 1,    "skipped" : 0,    "failed" : 0  },  "hits" : {    "total" : {      "value" : 4,      "relation" : "eq"    },    "max_score" : null,    "hits" : [ ]  },  "aggregations" : {    "sum_number" : {      "value" : 350.0    },    "terms_number" : {      "doc_count_error_upper_bound" : 0,      "sum_other_doc_count" : 2,      "buckets" : [        {          "key" : 150,          "doc_count" : 1        },        {          "key" : 100,          "doc_count" : 1        }      ]    },    "date_his" : {      "buckets" : [        {          "key_as_string" : "2021-11-10",          "key" : 1636473600000,          "doc_count" : 1        },        {          "key_as_string" : "2021-11-11",          "key" : 1636560000000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-12",          "key" : 1636646400000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-13",          "key" : 1636732800000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-14",          "key" : 1636819200000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-15",          "key" : 1636905600000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-16",          "key" : 1636992000000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-17",          "key" : 1637078400000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-18",          "key" : 1637164800000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-19",          "key" : 1637251200000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-20",          "key" : 1637337600000,          "doc_count" : 1        },        {          "key_as_string" : "2021-11-21",          "key" : 1637424000000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-22",          "key" : 1637510400000,          "doc_count" : 1        },        {          "key_as_string" : "2021-11-23",          "key" : 1637596800000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-24",          "key" : 1637683200000,          "doc_count" : 0        },        {          "key_as_string" : "2021-11-25",          "key" : 1637769600000,          "doc_count" : 1        }      ]    },    "range_number" : {      "buckets" : [        {          "key" : "50.0-100.0",          "from" : 50.0,          "to" : 100.0,          "doc_count" : 2        },        {          "key" : "100.0-150.0",          "from" : 100.0,          "to" : 150.0,          "doc_count" : 1        }      ]    },    "his_number" : {      "buckets" : [        {          "key" : 40.0,          "doc_count" : 2        },        {          "key" : 60.0,          "doc_count" : 0        },        {          "key" : 80.0,          "doc_count" : 0        },        {          "key" : 100.0,          "doc_count" : 1        },        {          "key" : 120.0,          "doc_count" : 0        },        {          "key" : 140.0,          "doc_count" : 1        }      ]    },    "min_number" : {      "value" : 50.0    },    "avg_number" : {      "value" : 87.5    },    "max_number" : {      "value" : 150.0    },    "count_number" : {      "value" : 4    }  }}


最后编辑于:2024/1/7 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com