elasticsearch之基础API

it2026-08-15  11

这里写自定义目录标题

ES的API一、常用的查询1、全文搜索查询1.1、应用场景1.2、常用查询1.2.1、match查询1.2.2、multi_match 多字段匹配查询 2、Term条件查询2.1应用场景2.2、常用查询2.2.1、range范围查询2.2.2、exists非空值查询2.2.3、prefix前缀查询2.2.4、wildcard通配符查询2.2.5、fuzzy模糊查询2.2.6、term条件查询 3、复合查询3.1、应用场景3.2、常用查询3.2.1、bool查询 二、聚合分析1、度量级聚合2.1应用场景2.2常用查询2.2.1、ave/max/min/sum aggregation 平均值/最大、小/求和聚合2.2.2、cardinality aggregation基数聚合2.2.3、Status/Extend Status aggregation 扩展状态聚合2.2.4、Percentiles Aggregation 百分比聚合 2、桶聚合2.1、应用场景2.2、常用查询2.2.1、Global Aggregation 全局聚合2.2.2、Range Aggregation 范围聚合2.2.3、Filter Aggregation 过滤聚合2.2.4、Terms Aggregation terms聚合2.2.4、Histogram Aggregation 直方图聚合 3、管道聚合3.1、应用场景3.2、常用查询3.2.1、Avg/max/min/sum Buckets Aggregation 平均值桶聚合3.2.2、Status /Extend Status Buckets Aggregation

ES的API

本篇是更加ES官网整理的有关查询的API

一、常用的查询

常用查询主要整理了:

全文搜索查询 ;Term条件查询 ;复合查询 ;

1、全文搜索查询

1.1、应用场景

用于查询全文字段上进行全文搜索,例如email。

1.2、常用查询

1.2.1、match查询

语法略 返回略

1.2.2、multi_match 多字段匹配查询

语法:

{ "query": { "multi_match": { "query":2, "fields":["log_id","user_id"] } } }

返回:在log_id 或者user_id 等于2的数据

2、Term条件查询

2.1应用场景

对像数字、日期等字段进行条件查询。例如查询 时间范围、数字查询、模糊查询等。不能再full text上使用。

2.2、常用查询

2.2.1、range范围查询
语法: { "query": { "range": { "create_time": { "gte":"2020-08-30 11:59:59", "format":"yyyy-MM-dd hh:mm:ss" } } } } 返回:、 返回create_time大于等于2020-08-30 11:59:59的所有数据
2.2.2、exists非空值查询
语法: { "query": { "exists": { "field":"math" } } } 返回:查询所有带有math的字段的数据。
2.2.3、prefix前缀查询
语法: { "query": { "prefix": { "user_name":"李" } } } 返回:返回所有用户名包含 ‘李’的数据
2.2.4、wildcard通配符查询
语法: {"query":{ "wildcard" :{ "user_name":{ "value":"李*仁" } } }} 说明:* 表示匹配多个字符,?表示匹配一个字符。
2.2.5、fuzzy模糊查询
语法: {"query":{ "fuzzy" :{ "user_name":{ "value":"五" } } }} 结果:查询姓名中所有带‘五’的数据
2.2.6、term条件查询
语法: { "query": { "term" : { "english" : 85 } } } 如果是中文: { "query": { "term" : { "user_name.keyword" : "张三" } } } 返回: 准备查询英语成绩为 85的学生

3、复合查询

3.1、应用场景

将其他复合查询或者叶子查询综合起来。must、must not、 should 、filter等进行筛选

3.2、常用查询

3.2.1、bool查询
语法: { "query": { "bool": { "must":{ "range":{"id":{"gte":11860}} }, "filter":{ "term":{"id":11861} } } } } 返回:查询条件必须是id大于等于11860的,并且过滤出id为11861的数据。

二、聚合分析

1、度量级聚合

2.1应用场景

对数据的某个字段进行计算,得到一个具体的值。例如对学生的数学成绩做,最大、最小、平均值、前几名等的统计。属于单指标的聚合查询

2.2常用查询

2.2.1、ave/max/min/sum aggregation 平均值/最大、小/求和聚合
语法: { "aggs":{ "max_english":{ "max":{ "field":"english" } } } } 返回: 返回的max_english的值即为英语成绩的最高分。
2.2.2、cardinality aggregation基数聚合
语法: { "aggs":{ "user_count":{ "cardinality":{ "field":"user_id" } } } } 返回:去重后的userid的个数。
2.2.3、Status/Extend Status aggregation 扩展状态聚合
Status语法: { "aggs":{ "english_count":{ "stats":{ "field":"english" } } } } 返回: 英语成绩的最大、最小、平均、数量信息 "aggregations": { "english_count": { "count": 8, "min": 78.0, "max": 98.0, "avg": 91.0, "sum": 728.0 } } Extended status语法 { "aggs":{ "extended_info":{ "extended_stats":{ "field":"english" } } } } 返回:除了state包含信息之外的其他统计信息 "aggregations": { "extended_info": { "count": 8, "min": 78.0, "max": 98.0, "avg": 91.0, "sum": 728.0, "sum_of_squares": 66694.0, "variance": 55.75, "variance_population": 55.75, "variance_sampling": 63.714285714285715, "std_deviation": 7.466592261534039, "std_deviation_population": 7.466592261534039, "std_deviation_sampling": 7.982122882685139, "std_deviation_bounds": { "upper": 105.93318452306808, "lower": 76.06681547693192, "upper_population": 105.93318452306808, "lower_population": 76.06681547693192, "upper_sampling": 106.96424576537028, "lower_sampling": 75.03575423462972 } } }
2.2.4、Percentiles Aggregation 百分比聚合
语法: { "aggs":{ "percent_info":{ "percentiles":{ "field":"english" } } } } 结果: 返回计算出的百分之比之间的值 指定百分之区间: { "aggs":{ "percent_info":{ "percentiles":{ "field":"english", "percents" : [95, 99, 99.9] } } } } 结果: "aggregations": { "percent_info": { "values": { "95.0": 98.0, "99.0": 98.0, "99.9": 98.0 } } }

2、桶聚合

2.1、应用场景

个人理解:将查询的每条结果,然后根据我们设定的区间做成一个个桶,然后再将每个结果放入到相应的桶内

2.2、常用查询

2.2.1、Global Aggregation 全局聚合
语法: { "query":{"match":{"user_id":"1"}}, //查询userid=1的信息数据 "aggs":{ "english_avg":{"avg":{"field":"english"}},//返回userId=1的平均成绩 "all_user":{ //返回所有人的平均成绩 "global":{}, "aggs":{ "all_avg_lenglish":{"avg":{"field":"english"}}//返回所有人的平均成 绩 } } } } 返回: "aggregations": { "english_avg": { "value": 81.5 }, "all_user": { "doc_count": 8, "all_avg_lenglish": { "value": 91.0 } } }
2.2.2、Range Aggregation 范围聚合
语法: {"aggs":{ "eng_range":{ "range":{ "field":"english", "ranges":[ {"to":60}, {"from":60,"to":80}, {"from":80} ] } } }} 返回: "buckets": [{ "key": "*-60.0", "to": 60.0, "doc_count": 0 }] 对范围值在聚合: 语法:{ "aggs":{ "eng_range":{ "range":{ "field":"english", "ranges":[ {"to":60}, {"from":60,"to":80}, {"from":80} ] }, "aggs":{ //对已经获取的range内的值在急性status 聚合 "eng_status":{ "stats":{ "field":"english" } } } } }} 返回: "buckets": [ { "key": "*-60.0", "to": 60.0, "doc_count": 0, "eng_status": { "count": 0, "min": null, "max": null, "avg": null, "sum": 0.0 } }]
2.2.3、Filter Aggregation 过滤聚合
语法: {"aggs":{ "user_filter":{ "filter":{"term":{"user_id":1}}}}} 结果: "aggregations": { //去重后的数据个数 "user_filter": { "doc_count": 2 } } Filter嵌套聚合: 语法: {"aggs":{ "user_filter":{ "filter":{"term":{"user_id":1}}, "aggs":{"avg_eng":{"avg":{"field":"english"}}} } }} 结果: "aggregations": { "user_filter": { "doc_count": 2, "avg_eng": { "value": 81.5 } } }
2.2.4、Terms Aggregation terms聚合
语法: {"aggs":{ "user_term":{ "terms":{ "field":"user_id", //根据userId统计 每个userId的个数,类似于group by + count "order":{"_count":"asc"} } } }} 结果 "buckets": [ { "key": 4, "doc_count": 1 }]
2.2.4、Histogram Aggregation 直方图聚合
语法: {"aggs":{ "eng" :{ "histogram":{ "field":"english", "interval":10 } }}} 返回: "buckets": [ { "key": 70.0, "doc_count": 1 }, { "key": 80.0, "doc_count": 3 }, { "key": 90.0, "doc_count": 4 } ]

3、管道聚合

3.1、应用场景

在桶聚合后的数据进行计算。比如,平均值聚合后得到buckets,然后再对将桶看作一个对象,对桶数据做运算。

3.2、常用查询

3.2.1、Avg/max/min/sum Buckets Aggregation 平均值桶聚合
语法: {"aggs":{ "eng" :{ "histogram":{ "field":"english", "interval":10 }, "aggs":{ "eng_sum" :{ "sum":{ "field":"english" } } } }, "avg_his_score" :{ "avg_bucket":{ "buckets_path":"eng>eng_sum" } } }} 结果: "aggregations": { "eng": { "buckets": [ { "key": 70.0, "doc_count": 1, "eng_sum": { "value": 78.0 } }, { "key": 80.0, "doc_count": 3, "eng_sum": { "value": 258.0 } }, { "key": 90.0, "doc_count": 4, "eng_sum": { "value": 392.0 } } ] }, "avg_his_score": { "value": 242.66666666666666 } } 分析: "avg_his_score": { "value": 242.66666666666666 } 为三个桶value值的和/3
3.2.2、Status /Extend Status Buckets Aggregation
将桶作为对象,对桶数据做状态分析。 {"aggs":{     "eng" :{         "histogram":{             "field":"english",             "interval":10         },          "aggs":{         "eng_sum" :{             "sum":{                 "field":"english"             }         }     }     },     "stats_his_score" :{         "stats_bucket":{             "buckets_path":"eng>eng_sum"         }     } }} 结果:只看stats_his_socre部分,对桶做了数值状态分析 "stats_his_score": {             "count": 3,             "min": 78.0,             "max": 392.0,             "avg": 242.66666666666666,             "sum": 728.0         }
最新回复(0)