附录:ES查询代码实现

使用BoolQueryBuilder进行查询实现

1.使用filter返回精确查询信息(Query用于返回相关查询) 2.should类似于or操做 3.matchQuery相当于增加$and查询 4.existsQuery相当于增加$exists操作 5.mustNot相当于增加$not操作

    /**     * 事件日志统计     */    public RiskEventLogCountsAndDetailsDTO eventLogCount(String partnerCode, DateTime startTime, DateTime endTime,                                                         String strategyCode,String scenarioInstanceCode,String riskLevel, String retCode){        Long time1 = System.currentTimeMillis();        RiskEventLogCountsAndDetailsDTO riskEventLogCountsAndDetailsDTO = new RiskEventLogCountsAndDetailsDTO();        SearchRequestBuilder searchRequestBuilder_prevent = null;        SearchRequestBuilder searchRequestBuilder_miss = null;        SearchRequestBuilder searchRequestBuilder_release = null;        BoolQueryBuilder boolQueryBuilder_prevent = QueryBuilders.boolQuery();        BoolQueryBuilder boolQueryBuilder_miss = QueryBuilders.boolQuery();        BoolQueryBuilder boolQueryBuilder_release = QueryBuilders.boolQuery();        if(!StringUtils.isEmpty(partnerCode)){            boolQueryBuilder_prevent.filter(QueryBuilders.matchQuery("partner_code",partnerCode));            boolQueryBuilder_release.filter(QueryBuilders.matchQuery("partner_code",partnerCode));            boolQueryBuilder_miss.filter(QueryBuilders.matchQuery("partner_code",partnerCode));        }        if(!StringUtils.isEmpty(scenarioInstanceCode)){            boolQueryBuilder_prevent.filter(QueryBuilders.matchQuery("scenario_instance_code",scenarioInstanceCode));            boolQueryBuilder_release.filter(QueryBuilders.matchQuery("scenario_instance_code",scenarioInstanceCode));            boolQueryBuilder_miss.filter(QueryBuilders.matchQuery("scenario_instance_code",scenarioInstanceCode));        }        if(!StringUtils.isEmpty(strategyCode)){            boolQueryBuilder_prevent.filter(QueryBuilders.matchQuery("strategy_code",strategyCode));            boolQueryBuilder_miss.filter(QueryBuilders.matchQuery("strategy_code",strategyCode));            boolQueryBuilder_release.filter(QueryBuilders.matchQuery("strategy_code",strategyCode));        }        if(null != startTime && null != endTime){            boolQueryBuilder_prevent.filter(QueryBuilders.rangeQuery("event_time").to(new DateTime(endTime.getYear(), endTime.getMonthOfYear(), endTime.getDayOfMonth(), 0, 0)                .plusDays(1)).from(new DateTime(startTime.getYear(), startTime.getMonthOfYear(), startTime.getDayOfMonth(), 0, 0).plus(1)));            boolQueryBuilder_miss.filter(QueryBuilders.rangeQuery("event_time").to(new DateTime(endTime.getYear(), endTime.getMonthOfYear(), endTime.getDayOfMonth(), 0, 0)                .plusDays(1)).from(new DateTime(startTime.getYear(), startTime.getMonthOfYear(), startTime.getDayOfMonth(), 0, 0).plus(1)));            boolQueryBuilder_release.filter(QueryBuilders.rangeQuery("event_time").to(new DateTime(endTime.getYear(), endTime.getMonthOfYear(), endTime.getDayOfMonth(), 0, 0)                .plusDays(1)).from(new DateTime(startTime.getYear(), startTime.getMonthOfYear(), startTime.getDayOfMonth(), 0, 0).plus(1)));        }        if(!StringUtils.isEmpty(riskLevel)){            if(riskLevel.equals("-1")){                boolQueryBuilder_prevent.filter(QueryBuilders.matchQuery("score",0));                boolQueryBuilder_miss.filter(QueryBuilders.matchQuery("score",0));                boolQueryBuilder_release.filter(QueryBuilders.matchQuery("score",0));            }            else{                boolQueryBuilder_prevent.filter(QueryBuilders.matchQuery("risk_level",riskLevel));                boolQueryBuilder_miss.filter(QueryBuilders.matchQuery("risk_level",riskLevel));                boolQueryBuilder_release.filter(QueryBuilders.matchQuery("risk_level",riskLevel));            }        }        BoolQueryBuilder queryBuilderTmp = QueryBuilders.boolQuery();        queryBuilderTmp.should(QueryBuilders.existsQuery("riskRules"))            .should(QueryBuilders.existsQuery("riskRules.0"));        boolQueryBuilder_miss            .mustNot(queryBuilderTmp);        boolQueryBuilder_prevent            .filter(QueryBuilders.matchQuery("ret_code","9999"))            .filter(QueryBuilders.existsQuery("riskRules.0"));        boolQueryBuilder_release            .filter(QueryBuilders.matchQuery("ret_code","0000"))            .filter(QueryBuilders.existsQuery("riskRules"));        searchRequestBuilder_prevent = client.prepareSearch(indexname).setTypes(type).setQuery(boolQueryBuilder_prevent);        log.info("boolQueryBuilder_prevent:{}",boolQueryBuilder_prevent);        MultiSearchRequestBuilder multiSearchRequestBuilder_prevent = client.prepareMultiSearch();        MultiSearchResponse multiSearchResponse_prevent = multiSearchRequestBuilder_prevent.add(searchRequestBuilder_prevent).execute().actionGet();        Long prevent_hit = 0l;        if(null != multiSearchResponse_prevent) {            for (MultiSearchResponse.Item response : multiSearchResponse_prevent.getResponses()){                prevent_hit = response.getResponse().getHits().getTotalHits();            }        }        searchRequestBuilder_miss = client.prepareSearch(indexname).setTypes(type).setQuery(boolQueryBuilder_miss);        log.info("boolQueryBuilder_miss:{}",boolQueryBuilder_miss);        MultiSearchRequestBuilder multiSearchRequestBuilder_miss = client.prepareMultiSearch();        MultiSearchResponse multiSearchResponse_miss = multiSearchRequestBuilder_miss.add(searchRequestBuilder_miss).execute().actionGet();        Long miss_hit = 0l;        if(null != multiSearchRequestBuilder_miss){            for(MultiSearchResponse.Item response : multiSearchResponse_miss.getResponses()){                miss_hit = response.getResponse().getHits().getTotalHits();            }        }        searchRequestBuilder_release = client.prepareSearch(indexname).setTypes(type).setQuery(boolQueryBuilder_release);        log.info("boolQueryBuilder_release:{}",boolQueryBuilder_release);        MultiSearchRequestBuilder multiSearchRequestBuilder_release = client.prepareMultiSearch();        MultiSearchResponse multiSearchResponse_release = multiSearchRequestBuilder_release.add(searchRequestBuilder_release).execute().actionGet();        Long release_hit = 0l;        if(null != multiSearchRequestBuilder_release){            for(MultiSearchResponse.Item response : multiSearchResponse_release.getResponses()){                release_hit = response.getResponse().getHits().getTotalHits();            }        }        Long sum_hit = 0l;        if(!StringUtils.isEmpty(retCode)){           if(retCode.equals("-1")){               release_hit = 0l;               prevent_hit = 0l;               sum_hit = miss_hit;           }            else if(retCode.equals("9999")){               miss_hit = 0l;               release_hit = 0l;               sum_hit = prevent_hit;           }            else if(retCode.equals("0000")){               prevent_hit =0l;               miss_hit = 0l;               sum_hit = release_hit;           }        }        else {            sum_hit = miss_hit+release_hit+prevent_hit;        }        Long time2 = System.currentTimeMillis();        log.debug("count waste time:{}", time2 - time1);        String preventProportion = "0.00%"; //阻止比例        String releaseProportion = "0.00%"; //放行比例        String missProportion = "0.00%"; //未命中比例        DecimalFormat df = new DecimalFormat("######0.00");        if(sum_hit!=0){            preventProportion = df.format(((double)prevent_hit/sum_hit)*100)+"%";            releaseProportion = df.format(((double)release_hit/sum_hit)*100)+"%";            missProportion = df.format(((double)miss_hit/sum_hit)*100)+"%";        }        riskEventLogCountsAndDetailsDTO.setRiskEventLogCounts(sum_hit);        riskEventLogCountsAndDetailsDTO.setMissRiskEventLogCounts(miss_hit);        riskEventLogCountsAndDetailsDTO.setPreventRiskEventLogCounts(prevent_hit);        riskEventLogCountsAndDetailsDTO.setReleaseRiskEventLogCounts(release_hit);        riskEventLogCountsAndDetailsDTO.setPreventProportion(preventProportion);        riskEventLogCountsAndDetailsDTO.setMissProportion(missProportion);        riskEventLogCountsAndDetailsDTO.setReleaseProportion(releaseProportion);        return riskEventLogCountsAndDetailsDTO;    }}