一、filter不计算相关性的,因此filter速度快于query。
1、filter单条件查询
# 查找age=25的数据
GET index_1/_search
{
"query": {
"bool": {
"filter": {
"term": {
"age": "25"
}
}
}
}
}
2、filter多条件查询
# 查询年龄90后,教育中专的数据
GET index_1/_search
{
"query": {
"bool": {
"filter": [{
"match_phrase": {
"age": "90后"
}},
{
"term":{
"education": "中专"
}
}]
}
}
}
二、query查询上下文,计算相关度
query查询的过滤条件
must:必须满足的条件 (相当于and)
should:可以满足也可以不满足的条件 (相当于or)
must_not:不需要满足的条件 (相当于not)
# 查询年龄90后,教育中专的数据
GET index_1/_search
{
"query": {
"bool": {
"must": [{
"match_phrase": {
"age": "90后"
}},
{
"term":{
"education": "中专"
}
}]
}
}
}
三、filter实现and、or、not功能
# 查询年龄90后,教育中专的数据
GET index_5/_search
{
"query": {
"bool": {
"filter": {
"bool": {
"must": [{
"term":{
"age": "90后"
}},
{
"match":{
"education": "中专"
}
}]
}
}
}
}
}
总结:
1、query,查询操作不仅仅会进行查询,还会计算分值_score,用于确定相关度;filter,查询操作仅判断是否满足查询条件
2、filter,查询的结果会被es自动缓存,提高查询效率。
3、query和filter多条件查询方法基本类似
4、query和filter查询条件可以通用,只需要调整某些格式即可