2016-11-25 82 views
1

我使用彈性2.4和我已經寫了下面的查詢彈性不工作:OR和和預期

"query": { 
     "bool": { 
      "should": [{ 
       "prefix": { 
        "firstname": "guneet" 
       } 
      }, { 
       "prefix": { 
        "lastname": "guneet" 
       } 
      }], 
      "must": [{ 
       "terms": { 
        "activities.id": ["1"] 
       } 
      }] 
     } 
    } 

這是沒有返回結果我的預期。它應該給我結果activities.id匹配名字或姓氏匹配。但是它會返回結果,其中activities.id匹配,忽略條件即它返回所有記錄,其中activities.id與匹配名稱或姓氏無關。

我從combining filters

我的查詢MySQL版本所取出的參考應該是這樣的: SELECT * FROM用戶那裏(名字,如 「%guneet%」 或姓氏,如 「%guneet%」)和activities.id = [1,2]。

任何建議,如何我可以模仿我的查詢,以獲得像上面的MySQL查詢。

在此先感謝!

回答

0

既然你有一個bool/must條款,你需要添加一個minimum_should_match clause,它會工作:

"query": { 
    "bool": { 
     "minimum_should_match": 1, 
     "should": [{ 
      "prefix": { 
       "firstname": "guneet" 
      } 
     }, { 
      "prefix": { 
       "lastname": "guneet" 
      } 
     }], 
     "must": [{ 
      "terms": { 
       "activities.id": ["1"] 
      } 
     }] 
    } 
} 
+0

這篇幫助? – Val