声明:本站文章均为作者个人原创,图片均为实际截图。如有需要请收藏网站,禁止转载,谢谢配合!!!

一个布尔查询是一个或多个查询字句的组合,总共有四种子句
布尔查询支持的子查询类型共有四种,分别是: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}}}
            ]
        }
    }
}