Elasticsearch 查詢in 和 not in 的實現方式

執筆記憶的空白發表於2017-11-30

 最近用到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 即可




相關文章