一个布尔查询是一个或多个查询字句的组合,总共有四种子句
布尔查询支持的子查询类型共有四种,分别是:must,should,must_not和filter
这里需要说明的是,每一个子查询都独自地计算文档的相关性得分。一旦他们的得分被计算出来, bool 查询就将这些得分进行合并并且返回一个代表整个布尔操作的得分。具体的得分规则在下面的评分计算章节中介绍。
must:文档必须匹配must查询条件;(相当于逻辑与)
should:文档应该匹配should子句查询条件(相当于逻辑或)
若查询语句中有must或者filter,则should只影响评分,文档就算是没有匹配should中的项也会被查到(即:匹配should中的0项)
若查询语句中没有must和filter,文档必须匹配should中的至少1项must_not:与must相反,匹配该选项下的查询条件的文档不会被返回(相当于逻辑与)
- filter:和must—样 ,匹配filter选项下的查询条件的文档才会被返回;跟must的区别是:filter不评分(即:不影响score),只起到过滤功能。(相当于逻辑与)
查询
- 名字包含如家
- 价格不高于400
- 在某坐标周围10km范围
{
query:{
bool: {
must: [
{match: {name: '如家'}}
],
must_not: [
{range: {price: {gt: 400}}}
],
filter: [
{geo_distance: {disance: "10km", location: {lat: 34.21, lon: 124.25}}}
]
}
}
}