首先查看index文档信息

$ curl -XGET "http://172.16.101.55:9200/_cat/indices?v"

输出

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open customer DvLoM7NjSYyjTwD5BSkK3A 10mb 10mb

查看当前elasticsearch中的数据信息

$ curl -XGET "http://172.16.101.55:9200/customer/_search?pretty" -H "Content-Type: application/json" -d '{ "query": { "match_all": {} }, "sort": [ { "customerid": "desc" } ], "from": 0, "size": 1 }'

输出

{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : null,
"hits" : [
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "20000",
"_score" : null,
"_source" : {
"customerid" : 20000,
"firstname" : "WODADM",
"lastname" : "AEBUFMJAWZ",
"address1" : "6224597470 Dell Way",
"address2" : null,
"city" : "DVCINXG",
"state" : null,
"zip" : 0,
"country" : "Australia",
"region" : 2,
"email" : "AEBUFMJAWZ@dell.com",
"phone" : "6224597470",
"creditcardtype" : 3,
"creditcard" : "1869697669055313",
"creditcardexpiration" : "2010/07",
"username" : "user20000",
"password" : "password",
"age" : 37,
"income" : 40000,
"gender" : "F"
},
"sort" : [
20000
]
}
]
}
}

avg:求平均值

$ curl -XGET "http://172.16.101.55:9200/customer/_search?pretty" -H "Content-Type: application/json" -d '{ "size": 0, "aggs": { "avg_age": { "avg": { "field": "age" } } } }'

输出

{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"avg_age" : {
"value" : 53.88315
}
}
}

min:求最小值

$ curl -XGET "http://172.16.101.55:9200/customer/_search?pretty" -H "Content-Type: application/json" -d '{ "size": 0, "aggs": { "avg_age": { "min": { "field": "age" } } } }'

输出

{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"avg_age" : {
"value" : 18.0
}
}
}

max:求最大值

$ curl -XGET "http://172.16.101.55:9200/customer/_search?pretty" -H "Content-Type: application/json" -d '{ "size": 0, "aggs": { "avg_age": { "max": { "field": "age" } } } }'

输出

{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"avg_age" : {
"value" : 90.0
}
}
}

cardinality:去重

$ curl -XGET "http://172.16.101.55:9200/customer/_search?pretty" -H "Content-Type: application/json" -d '{ "size": 0, "aggs": { "cardinality_country": { "cardinality": { "field": "country", "precision_threshold" : 100 } } } }'

注:precision_threshold选项表名我们确保当字段唯一值在 100 以内时会得到非常准确的结果

输出

{
"took" : 5,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"cardinality_country" : {
"value" : 12
}
}
}

geo bounds:空间索引

新建图书馆索引

$ curl -XPUT "http://172.16.101.55:9200/museums?pretty" -H "Content-Type: application/json" -d '{ "mappings": { "properties": { "location": { "type": "geo_point"} } } }'

输出

{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "museums"
}

查看索引信息

$ curl -XGET "http://172.16.101.55:9200/museums?pretty"

输出

{
"museums" : {
"aliases" : { },
"mappings" : {
"properties" : {
"location" : {
"type" : "geo_point"
}
}
},
"settings" : {
"index" : {
"creation_date" : "",
"number_of_shards" : "",
"number_of_replicas" : "",
"uuid" : "91Br4WhVRZSLlZgpu8dihA",
"version" : {
"created" : ""
},
"provided_name" : "museums"
}
}
}
}

上传测试数据

$ cat geo.json
{"index":{"_id":}}
{"location": "52.374081,4.912350", "name": "NEMO Science Museum"}
{"index":{"_id":}}
{"location": "52.369219,4.901618", "name": "Museum Het Rembrandthuis"}
{"index":{"_id":}}
{"location": "52.371667,4.914722", "name": "Nederlands Scheepvaartmuseum"}
{"index":{"_id":}}
{"location": "51.222900,4.405200", "name": "Letterenhuis"}
{"index":{"_id":}}
{"location": "48.861111,2.336389", "name": "Musée du Louvre"}
{"index":{"_id":}}
{"location": "48.860000,2.327000", "name": "Musée d'Orsay"}
$ curl -H "Content-Type: application/json" -XPOST "http://172.16.101.55:9200/museums/_bulk?pretty&refresh" --data-binary "@geo.json"

查看

$ curl -XPOST "http://172.16.101.55:9200/museums/_search?pretty" -H "Content-Type: application/json" -d '{ "size":0, "query": {"match" : { "name" : "musée" } }, "aggs": {"viewport": {"geo_bounds": {"field": "location", "wrap_longitude": true } } } }'

输出

{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"viewport" : {
"bounds" : {
"top_left" : {
"lat" : 48.86111099738628,
"lon" : 2.3269999679178
},
"bottom_right" : {
"lat" : 48.85999997612089,
"lon" : 2.3363889567553997
}
}
}
}
}

Percentiles:求一个numberic类型的文档范围占总文档的百分比

查看

$ curl -XGET "http://172.16.101.55:9200/customer/_search?pretty" -H "Content-Type: application/json" -d '{ "size": 0, "aggs": { "percentiles_age": { "percentiles": { "field": "age" } } } }'

输出

{
"took" : ,
"timed_out" : false,
"_shards" : {
"total" : ,
"successful" : ,
"skipped" : ,
"failed" :
},
"hits" : {
"total" : {
"value" : ,
"relation" : "gte"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"percentiles_age" : {
"values" : {
"1.0" : 18.0,
"5.0" : 21.0,
"25.0" : 35.543352601156066,
"50.0" : 54.0,
"75.0" : 72.0,
"95.0" : 87.0,
"99.0" : 90.0
}
}
}
}

说明:年龄小于等于18岁的文档数占总文档数为1%,年龄小于等于54岁的文档数占总文档数小于等于50%

默认的范围为[ 1, 5, 25, 50, 75, 95, 99 ],我们可以自定义

$ curl -XGET "http://172.16.101.55:9200/customer/_search?pretty" -H "Content-Type: application/json" -d '{ "size": 0, "aggs": { "percentiles_age": { "percentiles": { "field": "age", "percents": [30, 50, 90] } } } }'

输出

{
"took" : ,
"timed_out" : false,
"_shards" : {
"total" : ,
"successful" : ,
"skipped" : ,
"failed" :
},
"hits" : {
"total" : {
"value" : ,
"relation" : "gte"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"percentiles_age" : {
"values" : {
"30.0" : 39.123456790123456,
"50.0" : 54.0,
"90.0" : 83.0
}
}
}
}

Percentile rank:查看给定范围内的文档值占总文档比例

查看年龄小于等于30和年龄小于等于50的文档比例

$ curl -XGET "http://172.16.101.55:9200/customer/_search?pretty" -H "Content-Type: application/json" -d '{ "size": 0, "aggs": { "percentiles_rank_age": { "percentile_ranks": { "field": "age", "values": [30, 50], "keyed": "false" } } } }'

输出

{
"took" : ,
"timed_out" : false,
"_shards" : {
"total" : ,
"successful" : ,
"skipped" : ,
"failed" :
},
"hits" : {
"total" : {
"value" : ,
"relation" : "gte"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"percentiles_rank_age" : {
"values" : [
{
"key" : 30.0,
"value" : 17.395
},
{
"key" : 50.0,
"value" : 45.0
}
]
}
}
}
stats:返回in, max, sum, count and avg
$ curl -XGET "http://172.16.101.55:9200/customer/_search?pretty" -H "Content-Type: application/json" -d '{ "size": 0, "aggs": { "stats_age": { "stats": { "field": "age" } } } }'

输出

{
"took" : ,
"timed_out" : false,
"_shards" : {
"total" : ,
"successful" : ,
"skipped" : ,
"failed" :
},
"hits" : {
"total" : {
"value" : ,
"relation" : "gte"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"stats_age" : {
"count" : ,
"min" : 18.0,
"max" : 90.0,
"avg" : 53.88315,
"sum" : 1077663.0
}
}
}
 
 
 
 
 

Elasticsearch Metric聚合的更多相关文章

  1. Elasticsearch(8) --- 聚合查询(Metric聚合)

    Elasticsearch(8) --- 聚合查询(Metric聚合) 在Mysql中,我们可以获取一组数据的 最大值(Max).最小值(Min).同样我们能够对这组数据进行 分组(Group).那么 ...

  2. ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合

    Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...

  3. Elasticsearch(9) --- 聚合查询(Bucket聚合)

    Elasticsearch(9) --- 聚合查询(Bucket聚合) 上一篇讲了Elasticsearch聚合查询中的Metric聚合:Elasticsearch(8) --- 聚合查询(Metri ...

  4. Elasticsearch 之聚合分析入门

    本文主要介绍 Elasticsearch 的聚合功能,介绍什么是 Bucket 和 Metric 聚合,以及如何实现嵌套的聚合. 首先来看下聚合(Aggregation): 什么是 Aggregati ...

  5. Elasticsearch系列---聚合查询原理

    概要 本篇主要介绍聚合查询的内部原理,正排索引是如何建立的和优化的,fielddata的使用,最后简单介绍了聚合分析时如何选用深度优先和广度优先. 正排索引 聚合查询的内部原理是什么,Elastich ...

  6. ElasticSearch 的 聚合(Aggregations)

    Elasticsearch有一个功能叫做 聚合(aggregations) ,它允许你在数据上生成复杂的分析统计.它很像SQL中的 GROUP BY 但是功能更强大. Aggregations种类分为 ...

  7. ElasticSearch - 信息聚合系列之聚合过滤

    摘要 聚合范围限定还有一个自然的扩展就是过滤.因为聚合是在查询结果范围内操作的,任何可以适用于查询的过滤器也可以应用在聚合上. 版本 elasticsearch版本: elasticsearch-2. ...

  8. (转)Elasticsearch分析聚合

    Elasticsearch不仅仅适合做全文检索,分析聚合功能也很好用.下面通过实例来学习. 一.准备数据 {"index":{ "_index": " ...

  9. Elasticsearch学习(4) spring boot整合Elasticsearch的聚合操作

    之前已将spring boot原生方式介绍了,接下将结介绍的是Elasticsearch聚合操作.聚合操作一般来说是解决一下复杂的业务,比如mysql中的求和和分组,由于博主踩的坑比较多,所以博客可能 ...

随机推荐

  1. Flex 布局是什么?

    Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 Flex 布局.大理石平台价格 .box{ displ ...

  2. jquery clearQueue方法 语法

    jquery clearQueue方法 语法 作用:clearQueue() 方法停止队列中所有仍未执行的函数.与 stop() 方法不同,(只适用于动画),clearQueue() 能够清除任何排队 ...

  3. codevs 1200 同余方程 2012年NOIP全国联赛提高组 x

    /*我在提交的时候发现了一个特别好玩的事,有兴趣的话,可以自己尝试一下:把下面说的地方的y=0改为y=1在codevs里面能够ac,这……数据水?到一定境界……厉害了,吓得我还以为自己对了,结果一讲才 ...

  4. zabbix服务端接收的数据类型,便于编写脚本向服务端提交数据

    1.数据类型1:zabbix_agent执行脚本提交字典 UserParameter=tcp_port_listen,/usr/local/zabbix/share/script/get_game_p ...

  5. 自定义MessageConverter--消息转换器

    我们在进行发送消息的时候,正常情况下消息体为二进制的数据方式进行传输,如果希望内部帮我们进行转换,或者指定自定义的转换器,就需要用到MessageConverter 自定义常用转换器:MessageC ...

  6. JavaWeb_(Struts2框架)Ognl小案例查询帖子

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  7. [CSP-S模拟测试]:数学课(找规律+数学)

    题目传送门(内部题145) 输入格式 从$math.in$读入数据. 第一行两个数,为$n,q$.接下来$q$行每行一个数$m$,询问大小为$m$的$A$一共有多少个. 输出格式 输出答案到$math ...

  8. 对iOS锁的一些研究

    #import <objc/runtime.h> #import <objc/message.h> #import <libkern/OSAtomic.h> #im ...

  9. JavaScript:固定table的表头

    当表格数据很多,以致于容器块元素出现滚动条.而在滚动滚动条的时候,数据行会被块元素遮挡.若要保持表格的head部分始终在可视范围内,我们需要对表头进行特殊的样式设置.下面的jsp代码可以实现表头固定, ...

  10. Mysql的exist与in的区别

    如果查询的两个表大小相当,那么用in和exists差别不大. 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:    例如:表A(小表),表B(大表)   1: s ...