在elasticsearch中,我们使用比较多的还有这种布尔查询和布尔过滤器。这种主要是为了在组合查询或者复合查询的场景下使用的,整个bool查询或者布尔过滤器中,一定会出现must(必须满足)、should(应该满足)、must_not(不满足)这三个条件的至少一个。
bool查询的语法如下:
POST /{索引名}/_search
{
"query": {
"bool": { // bool查询
"must": [], // must条件,类似SQL中的and, 代表必须匹配条件
"must_not": [], // must_not条件,跟must相反,必须不匹配条件
"should": [], // should条件,类似SQL中or, 代表匹配其中一个条件
"filter": [] // 不计算得分
}
}
}关于Bool查询的特点是:
1、如果指定bool查询的某部分是must匹配,则只有匹配上这些查询的结果才会被返回。 2、如果指定了bool查询的某部分是should匹配,只有匹配上指定数量子句的文档才会被返回。 3、如果没有指定must匹配的子句,文档至少要匹配一个should子句才会被返回。 4、must_not子句会使匹配的文档被移出结果集。
关于这3个子句,我们也可以使用sql的方式理解一下.
must查询
可以理解成 select * from table where a = ? and b= ? and c= ?
should查询
可以理解成 select * from table where a=? or b = ? or c = ?
must_not查询
可以理解成 select * from table where a != ? and b != ? and c != ?
下面我们举个案例看一下,还是使用前面的test索引。
一、使用bool查询
post /test/_search
{
"query": {
"bool": {
"must": [{
"term": {
"_id": 1
}
}],
"must_not": [{
"term": {
"_id": 3
}
}],
"should": [{
"match": {
"description": "doing"
}
}],
"filter": []
}
}
}从上面的案例可以看到具体的查询结果。
二、使用bool过滤器查询
使用过滤器的时候,我们和普通查询是一样的,只是根据上面的公式,在filter里面添加过滤条件即可,例如:
post /test/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": [
{
"term": {
"_id": 1
}
}
]
}
}
}备注:
1、bool查询的话在日常工作中使用率非常高。
2、bool查询的时候可以看到must,must_not,should都是数组的形式,也就是这里可以传递多个匹配条件。



还没有评论,来说两句吧...