elasticsearch之基础API

ES的API

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

一、常用的查询

常用查询主要整理了:

  1. 全文搜索查询
  2. Term条件查询
  3. 复合查询

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值