elasticsearch must 和 should 并列的情况

  在elasticsearch中如果要对几个字段进行查询,然后其中有一个字段可以有多个取值的时候,正常想到的要用should,其实就是或的关系。但是正确的做法,应该是把should并列的条件整合到一个bool查询,然后嵌套到must之中去。而不是和must并列。项目中,也用了错误的写法,然后发现must和should同时存在的时候,should将会变得不起作用。

 

     例如:

{
    "bool":{
        "must":[
            {
                "match_phrase":{
                    "camera_dwlb":{
                        "query":"一类视频监控点",
                        "slop":0,
                        "boost":1
                    }
                }
            }
        ],
        "should":[
            {
                "match_phrase":{
                    "city_name":{
                        "query":"福州市",
                        "slop":0,
                        "boost":1
                    }
                }
            },
            {
                "match_phrase":{
                    "city_name":{
                        "query":"厦门市",
                        "slop":0,
                        "boost":1
                    }
                }
            }
        ],
        "disable_coord":false,
        "adjust_pure_negative":true,
        "boost":1
    }
}

 

以上查询的意思本来是想要福州、厦门摄像机点位类别属性为一类视频监控点,查出来了一个数量,然后我随意的改变should数组里面的查询条件,发现查询的结果总是不变的。都是以must数组里面的条件为准

写此谨记!!!

 

posted @ 2019-09-02 14:39  护花使者  Views(13894)  Comments(0Edit  收藏  举报