在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數組里面的條件為准
寫此謹記!!!
