elasticsearch 查询语句
1、简单查询
url:index/_search
- 不带参数、分页、排序查询
json:
{
"size":10
}
- 带分页、字段筛选查询
{
"size":10,
"from":0, //从第几条开始取,若要做分页该值则是page*size
"query":{ //字段筛选的必要字段,
"match":{ //查询的基础语句,与之类似的有 terms 等
"province":"湖南" //字段名
}
},
"sort":{ //排序语句
"created_at":{
"order":"desc"
}
}
}
2、复杂查询
*复杂查询语句
{
"size": 10,
"from": 0,
"query": {
"bool": {
"must": [
{
"match": {
"city": "长沙"
}
},
{
"match": {
"province": "湖南"
}
}
]
}
},
"sort": {
"created_at": {
"order": "desc"
}
}
}
ps:当你需要多个条件来进行查询时,这时可以考虑用复杂查询来进行,复杂查询的语句构造
{
"query": {
"bool": {
"must": [
{ // must 复杂查询字段,相当于mysql中的 AND
"match": {
"fields": "value"
}
},
{
"range": { //范围查询,具体 下面会一一讲述
"fields":{
"gte":1,
"lte":2
}
}
}
]
}
}
}
3、聚合统计
-
概述
聚合查询非常适合用于统计某个索引中的各项数据,比如:统计某天的每个小时的用户量等 -
语句
{
"size": 0,
"query":{ //筛选条件来得到统计信息
"bool":{
"must":{
"match":{
"uid":60118080791
}
}
}
},
"aggs": {
"result": {
"date_histogram": { //按日期分组
"field": "created_at",
"interval": "2h", // 分组间隔时间 可以是1h 1day,具体自己去了解
"format": "yyyy-MM-dd HH:mm:ss" //格式化
},
"aggs":{
"total":{ //结果字段,自定义
"terms":{
"field":"uid",
"size":200 //显示数量
},
"aggs":{
"max_follower":{ //结果字段、自定义
"extended_stats":{ //得到的统计信息,有平均值、最大值、最小值、方差
"field":"follower_count"
}
}
}
}
}
}
}
}
4、语句的相应字段解释
- must
must
相当于mysql
中的and
语句,比如我要查询学生表中性别为男
并且年龄为18
岁的学生,语句构造如下:
{
"query": {
"bool": {
"must": [
{
"match": {
"gender": 1
}
},
{
"match": {
"age": 18
}
}
]
}
}
}
在以上语句中,如果有多个条件,则 must
后面需是数组对象,即:must:[{},{}]
- match
match
一般适用于在字段查询时,相当于模糊查询
,如果要查询的字段设置了分词器
,就会是模糊查询
,如:我需要查询签名中含有操作
的所有用户,语句构造如下:
{
"query": {
"bool": {
"must": [
{
"match": {
"signature": "操作"
}
}
]
}
}
}
上述语句中如果只有一个条件,建议不使用 bool
结构,可以使用最简单 query:{match:{field:""}}
,
与match
类似的结构有 terms
,该结构主要是用于精确查询,
- range
range
相当于mysql
中的between
,一般用户范围查询,比如:我要查询年龄在18至20岁的学生,语句构造如下:
{
"query": {
"bool": {
"must": [
{
"range": {
"age": {
"gte":18,
"lte":20
}
}
}
]
}
}
}
gte
相当于 >
,lte
相当于 <
网友评论