es复杂查询

BoolQueryBuilder q = QueryBuilders.boolQuery();
Sort sort = new Sort(Sort.Direction.DESC,"createdTime");

if(f.getType()==null){
    throw new ServiceException(ErrorConstants.APPROVAL_FIND_TYPE_NOT_EXISTENT, Constants.APPROVAL_FIND_TYPE_NOT_EXISTENT);
}else if(f.getType()==1){
    //我发起的
    if(f.getGroupBy()!=null){
        q.must(QueryBuilders.matchPhraseQuery("groupBy",f.getGroupBy()));
    }
    if(f.getStatus()==null){
        throw new ServiceException(ErrorConstants.APPROVAL_FIND_STATUS__ERROR, Constants.APPROVAL_FIND_STATUS__ERROR);
    }else if(f.getStatus()==0){
        //已完成
        q.must(QueryBuilders.matchPhraseQuery("createdBy",userDetails.getOpenId()));
        q.must(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("endTime")));
    }else if(f.getStatus()==1){
        //未完成
        q.must(QueryBuilders.matchPhraseQuery("createdBy",userDetails.getOpenId()));
        q.must(QueryBuilders.existsQuery("endTime"));
    }else {
        throw new ServiceException(ErrorConstants.APPROVAL_FIND_STATUS__ERROR, Constants.APPROVAL_FIND_STATUS__ERROR);
    }
}else if(f.getType()==2){
    //我审批的
    if(f.getGroupBy()!=null){
        q.must(QueryBuilders.matchPhraseQuery("groupBy",f.getGroupBy()));
    }
    if(f.getStatus()==null){
        throw new ServiceException(ErrorConstants.APPROVAL_FIND_STATUS__ERROR, Constants.APPROVAL_FIND_STATUS__ERROR);
    }else if(f.getStatus()==0){
        //未审批
        q.must(QueryBuilders.termQuery("notApproversId",userDetails.getOpenId()));
    }else if(f.getStatus()==1){
        //已审批
        q.must(QueryBuilders.termQuery("approversId",userDetails.getOpenId()));
    }else {
        throw new ServiceException(ErrorConstants.APPROVAL_FIND_STATUS__ERROR, Constants.APPROVAL_FIND_STATUS__ERROR);
    }
}else if(f.getType()==3){
    //抄送我的
    if(f.getGroupBy()!=null){
        q.must(QueryBuilders.matchPhraseQuery("groupBy",f.getGroupBy()));
    }
    if(f.getStatus()==null){
        throw new ServiceException(ErrorConstants.APPROVAL_FIND_STATUS__ERROR, Constants.APPROVAL_FIND_STATUS__ERROR);
        }else if(f.getStatus()==0){
            //未读:查询notCopyId包含当前用户,并且adopt为总的通过
            q.must(QueryBuilders.termQuery("notCopyId",userDetails.getOpenId()));
            q.must(QueryBuilders.matchPhraseQuery("adopt","1"));
        }else if(f.getStatus()==1){
            //已读:查询copyId包含当前用户;
            q.must(QueryBuilders.termQuery("copyId",userDetails.getOpenId()));
    }else {
        throw new ServiceException(ErrorConstants.APPROVAL_FIND_STATUS__ERROR, Constants.APPROVAL_FIND_STATUS__ERROR);
    }
}else if(f.getType()==4){
    //个人的
    if(f.getGroupBy()!=null){
        q.must(QueryBuilders.matchPhraseQuery("groupBy",f.getGroupBy()));
    }
    if(f.getGroupBy()==null){
        //个人的所有的

        //条件1我发起的未完成的
        BoolQueryBuilder q1 = QueryBuilders.boolQuery();
        q1.must(QueryBuilders.matchPhraseQuery("createBy",userDetails.getOpenId()));
        q1.must(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("endTime")));
        //条件2该我审批的
        BoolQueryBuilder q2 = QueryBuilders.boolQuery();
        q2.must(QueryBuilders.termQuery("notApproversId",userDetails.getOpenId()));
        //条件3审批草稿
        BoolQueryBuilder q3 = QueryBuilders.boolQuery();
        q3 .must(QueryBuilders.matchPhraseQuery("approveType","4"));

        q.should(q1);
        q.should(q2);
        q.should(q3);
    }else {
        //个人的团队的的加上groupBy
        BoolQueryBuilder q1 = QueryBuilders.boolQuery();
        q1.must(QueryBuilders.matchPhraseQuery("groupBy",f.getGroupBy()));
        q1.must(QueryBuilders.matchPhraseQuery("createdBy",userDetails.getOpenId()));
        q1.must(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("endTime")));

        BoolQueryBuilder q2 = QueryBuilders.boolQuery();
        q2.must(QueryBuilders.matchPhraseQuery("groupBy",f.getGroupBy()));
        q2.must(QueryBuilders.termQuery("notApproversId",userDetails.getOpenId()));

        BoolQueryBuilder q3 = QueryBuilders.boolQuery();
        q3.must(QueryBuilders.matchPhraseQuery("groupBy",f.getGroupBy()));
        q3.must(QueryBuilders.matchPhraseQuery("approveType","4"));

        q.should(q1);
        q.should(q2);
        q.should(q3);
    }
}else {
    throw new ServiceException(ErrorConstants.APPROVAL_FIND_TYPE_NOT_EXISTENT, Constants.APPROVAL_FIND_TYPE_NOT_EXISTENT);
}
Pageable pageable1 = new PageRequest(pageable.getPageNumber(),pageable.getPageSize(),sort);
Page<ApproveElasticSearch> search = approveElasticSearchRepository.search(q, pageable1);

猜你喜欢

转载自blog.csdn.net/qq_39438729/article/details/79375445