ElasticSearch(十二) Bool Query JAVA API


Bool Query 用於組合多個葉子或復合查詢子句的默認查詢

must 相當於 與 & =

must not 相當於 非 ~   !=

should 相當於 或  |   or 

filter  過濾

boolQuery()
        .must(termQuery("content", "test1"))               
        .must(termQuery("content", "test4"))                 
        .mustNot(termQuery("content", "test2"))              
        .should(termQuery("content", "test3"))               
        .filter(termQuery("content", "test5"));


private SearchRequest getSearchRequest(RequestType request) {

SearchRequest sr = new SearchRequest();

//指定索引名稱,如未指定則會查詢所有
sr.indices(ElasticSearchConst.XXX_INDEX);
sr.types(ElasticSearchConst.XXX_TYPE);

SearchSourceBuilder source = new SearchSourceBuilder();
BoolQueryBuilder bq = QueryBuilders.boolQuery();

getQueryBuilder(request, bq);

// from 從0開始,包含前后邊界 實際是  <=  >=

source.from(request.getRowStart());
source.size(request.getRowSize());
source.query(bq);

setSort(request, source);
sr.source(source);
return sr;
}

 
        

private void getQueryBuilder(RequestType request, BoolQueryBuilder bq) {

getOrderQueryBuilder(request, bq);

       addPurchaseOrderQueryBuilder(request, bq);
}

 

/**
* 查詢條件
*
* @param request
* @param bq
*/
private void getOrderQueryBuilder(RequestType request, BoolQueryBuilder bq) {

        // termQuery 精確匹配,不分詞 相當於 等於 =

       //Type.childType 多層類型嵌套,具體索引結構,參考mapping   

      //  GET  yourindexname/_mapping

     Mapping:

{
  "yourindexname": {
    "mappings": {
      "type1": {
        "properties": {
          "childtype": {
            "properties": {
              "cedStatus": {
                "type": "text",
                "fields": {
                "keyword": {
                "type": "keyword",
                "ignore_above": 256
                      }
                    }
                },

  bq.must(QueryBuilders.termQuery("Type.childType", request.getOrderId()));
        //rangeQuery 范圍查詢,最大范圍不超過1w

  bq.must(QueryBuilders.rangeQuery("Type.childType.departureDate")
    .gte(DateUtil.toSqlTimeStamp(request.getDepartureDateStart().getTime()).getTime())
    .lte(DateUtil.toSqlTimeStamp(request.getDepartureDateEnd().getTime()).getTime()));

//QueryBuilders.matchPhraseQuery  匹配查詢,不分詞,相當於 contains

//matchPhraseQuery 是直接以一個短語的形式查詢,順序無差,且連接在一起

pobq.must(QueryBuilders.matchPhraseQuery(
  String.format("%s%s%s", preFix, i, ".vacationVBKPurchaseOrderBaseInfoDto.contactName"),
  request.getContactName()));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM