4. 条件查询
首先区分下match,match_phrase,term, 参考:https://zhuanlan.zhihu.com/p/592767668?utm_id=0
1、全量查询+分页+指定source
示例:请求地址为http://127.0.0.1:9200/students/_search,请求体为:
{"query": {"match_all": {}},"from": 0,"size": 2,"_source": ["姓名","年级","班级"],"sort": {"班级": {"order": "desc"}}
}
- 请求体中的match_all表示匹配所有
- 请求体中from和size用于分页查询,from表示第一个元素的位置(从0开始),size表示要查询的数量。
- 请求体中_source是一个列表,指定要查询的列。
- 请求体中的sort用于结果排序,order取值asc(升序),desc(降序)
- 返回结果中的took表示查询耗时
2. 单条件查询
查询5年级的学生,请求body:
{"query": {"match": {"年级":5}}
}
- 请求体中match表示匹配一个条件
3. 多条件查询
3.1 基本多条件查询
3.1.1 多个条件同时匹配
查询5年级2班的学生,请求body:
{"query": {"bool": {"must": [{"match": {"年级": 5}},{"match": {"班级": 2}}]}}
}
- bool 表示一个条件,条件为true表示匹配,false表示不匹配,其下可以使用must,should,filter等多个条件。
- must可以设置多个条件,是一个数组,表示其下的条件必须全部匹配
- 把must改为should,表示其下的条件满足一个即可
3.1.2 满足至少一个条件
查找1班和2班的学生:
{"query": {"bool": {"should": [{"match": {"班级": 1}},{"match": {"班级": 2}}]}}
}
3.1.3 范围查询
must表示多个条件同时满足,should表示至少匹配一个条件,filter表示过滤查询;范围使用range匹配(和match,match_all相同,指定具体条件)。
例如查询5年级1班和2班的学生:
{"query": {"bool": {"must": [{"match": {"年级": 5}}],"filter": {"range": {"班级": {"gte": 1,"lte": 2}}}}}
}
4. 分组查询(聚合查询)
{"aggs": {"班级分组": {"terms": {"field": "班级"}}}
}
更多的时候,我们只想要分组统计,不需要查询原始数据,可以设置查询size为0
{"aggs": {"班级分组": {"terms": {"field": "班级"}}},"size": 0
}
- 请求中的terms表示分组统计,其他的关键字还有:avg(对field指定的字段取平均值)