Elasticsearch 查詢in 和 not in 的實現方式
阿新 • • 發佈:2019-01-06
最近用到ES查詢,因用的是Java寫的,需要實現一個需求: 過濾一部分id, 查詢時不需要查出來。
既然需要不包含,那麼首先需要實現包含的方式(精確完全匹配),這裡我們要用到的是termQuery
首先看下ES Bool聯合查詢的屬性:
bool聯合查詢: must,should,must_not
聯合查詢就會使用到must,should,must_not三種關鍵詞。
這三個可以這麼理解
- must: 文件必須完全匹配條件
- should: should下面會帶一個以上的條件,至少滿足一個條件,這個文件就符合should
- must_not: 文件必須不匹配條件
具體案例,我需要過濾掉不用的exerciseId:
BoolQueryBuilder exersiceBoolQuery = QueryBuilders.boolQuery(); if (exersiceIds != null && exersiceIds.size() > 0) { for (String exerciseId: exersiceIds) { exersiceBoolQuery.mustNot(QueryBuilders.termQuery("id", exerciseId)); } }
最後在傳送請求的時候,加上你的exersiceBoolQuery 即可