es聚合查询总结

mac2024-03-20  30

等级关系树(这里以六级为例) public ServerResponse<?> getHierarchyTree(String bp_account_id) { long starttime = System.currentTimeMillis(); TransportClient client = ElasticSearchUtils.getClient(); // 返回json结果集 JSONObject datas = new JSONObject(); try { // 临时表:cml_bp_hierarchy_new //根据bp_account_id查bp_tree_id HashMap<String, Integer> hashMap = new HashMap<>(); SearchRequestBuilder dealRequestBuilder = client.prepareSearch().setIndices(SearchConstants.CML_BP_HIERARCHY_NEW); dealRequestBuilder.setQuery(QueryBuilders.queryStringQuery(bp_account_id).field("bp_account_id.keyword")); SearchResponse response = dealRequestBuilder.setSize(1).execute().actionGet(); SearchHit[] hits = response.getHits().getHits(); if (hits != null && hits.length != 0) { Map<String, Object> sourceAsMap = hits[0].getSourceAsMap(); String bp_tree_id = (String) sourceAsMap.get("bp_tree_id"); //查询所有的bp_account_id ArrayList<String> result = new ArrayList<>(); SearchRequestBuilder dealRequestBuilder1 = client.prepareSearch().setIndices(SearchConstants.CML_BP_HIERARCHY_NEW); dealRequestBuilder1.setQuery(QueryBuilders.queryStringQuery(bp_tree_id).field("bp_tree_id.keyword")); SearchResponse resultRespon = dealRequestBuilder1.setSize(5000).execute().actionGet(); SearchHit[] resultHits = resultRespon.getHits().getHits(); for (SearchHit resultHit : resultHits) { Map<String, Object> reAsMap = resultHit.getSourceAsMap(); result.add((String) reAsMap.get("bp_account_id")); } if (result.size() != 0) { //查询最近三年 表 dml_customer_sum_new bp_account_id与customer对应 BoolQueryBuilder mustQuery1 = QueryBuilders.boolQuery(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String end = sdf.format(new Date()); String start = String.valueOf(Integer.parseInt(end) - 30000); mustQuery1.must(QueryBuilders.termsQuery("customer", result)).must(QueryBuilders.rangeQuery("create_date").from(start).to(end)); SearchRequestBuilder dealRequestBuilder2 = client.prepareSearch().setIndices(SearchConstants.DML_CUSTOMER_SUM_NEW); dealRequestBuilder2.setQuery(mustQuery1) .addAggregation(AggregationBuilders.terms("customer").field("customer.keyword") .subAggregation(AggregationBuilders.sum("so_amount").field("so_amount")).size(5000)) .setSize(0); SearchResponse respon = dealRequestBuilder2.execute().actionGet(); Terms customer = respon.getAggregations().get("customer"); List<? extends Bucket> customerBuckets = customer.getBuckets(); for (Bucket customerBucket : customerBuckets) { Sum so_net_value = customerBucket.getAggregations().get("so_amount"); double value = so_net_value.getValue(); String keyAsString = customerBucket.getKeyAsString(); if (value > 0) { hashMap.put(keyAsString, 2); } else { hashMap.put(keyAsString, 3); } } //查询最近一年 BoolQueryBuilder mustQuery2 = QueryBuilders.boolQuery(); String end2 = sdf.format(new Date()); String start2 = String.valueOf(Integer.parseInt(end) - 10000); mustQuery2.must(QueryBuilders.termsQuery("customer", result)).must(QueryBuilders.rangeQuery("create_date").from(start2).to(end2)); SearchRequestBuilder dealRequestBuilder3 = client.prepareSearch().setIndices(SearchConstants.DML_CUSTOMER_SUM_NEW); dealRequestBuilder3.setQuery(mustQuery2) .addAggregation(AggregationBuilders.terms("customer2").field("customer.keyword") .subAggregation(AggregationBuilders.sum("so_amount").field("so_amount"))) .setSize(5000); SearchResponse respon2 = dealRequestBuilder3.execute().actionGet(); Terms customer2 = respon2.getAggregations().get("customer2"); List<? extends Bucket> customerBuckets2 = customer2.getBuckets(); for (Bucket customerBucket : customerBuckets2) { Sum so_net_value = customerBucket.getAggregations().get("so_amount"); double value = so_net_value.getValue(); String keyAsString = customerBucket.getKeyAsString(); if (value > 0) { hashMap.put(keyAsString, 1); } } } //查询关系树 并将对应的state值放入出参中 TermsAggregationBuilder level1TermBuild = AggregationBuilders.terms("level1Agg").field("bp_id_level1_h.keyword") .subAggregation(AggregationBuilders.topHits("top1").size(1)).size(Integer.MAX_VALUE); TermsAggregationBuilder level2TermBuild = AggregationBuilders.terms("level2Agg").field("bp_id_level2_h.keyword") .subAggregation(AggregationBuilders.topHits("top2").size(1)).size(Integer.MAX_VALUE); level1TermBuild.subAggregation(level2TermBuild); TermsAggregationBuilder level3TermBuild = AggregationBuilders.terms("level3Agg").field("bp_id_level3_h.keyword") .subAggregation(AggregationBuilders.topHits("top3").size(1)).size(Integer.MAX_VALUE); level2TermBuild.subAggregation(level3TermBuild); TermsAggregationBuilder level4TermBuild = AggregationBuilders.terms("level4Agg").field("bp_id_level4_h.keyword") .subAggregation(AggregationBuilders.topHits("top4").size(1)).size(Integer.MAX_VALUE); level3TermBuild.subAggregation(level4TermBuild); TermsAggregationBuilder level5TermBuild = AggregationBuilders.terms("level5Agg").field("bp_id_level5_h.keyword") .subAggregation(AggregationBuilders.topHits("top5").size(1)).size(Integer.MAX_VALUE); level4TermBuild.subAggregation(level5TermBuild); TermsAggregationBuilder level6TermBuild = AggregationBuilders.terms("level6Agg").field("bp_id_level6_h.keyword") .subAggregation(AggregationBuilders.topHits("top6").size(1)).size(Integer.MAX_VALUE); level5TermBuild.subAggregation(level6TermBuild); SearchRequestBuilder dealRequestBuilder4 = client.prepareSearch().setIndices(SearchConstants.CML_BP_HIERARCHY_NEW); SearchResponse searchResponse = dealRequestBuilder4.setQuery(QueryBuilders.queryStringQuery(bp_tree_id) .field("bp_tree_id.keyword")).addAggregation(level1TermBuild).setSize(0).execute().actionGet(); //第一级 Terms level1Terms = searchResponse.getAggregations().get("level1Agg"); List<? extends Bucket> level1List = level1Terms.getBuckets(); JSONObject obj1 = new JSONObject(); Integer statelevel1 = null; for (Bucket b1 : level1List) { String bp_id_level1 = b1.getKeyAsString(); if ("".equals(bp_id_level1)) { continue; } obj1.put("AccountID", bp_id_level1); TopHits topHits = b1.getAggregations().get("top1"); String bp_account_id1 = null; for (SearchHit hit : topHits.getHits()) { Map<String, Object> source = hit.getSourceAsMap(); obj1.put("CompanyName", source.get("bp_id_level1_h_desc")); bp_account_id1 = (String) source.get("bp_account_id"); statelevel1 = hashMap.get(bp_account_id); if (statelevel1 != null) { obj1.put("state", statelevel1); } else { obj1.put("state", 3); statelevel1 = 3; hashMap.put(bp_account_id1, 3); } break; } //第二级 Terms level2Terms = b1.getAggregations().get("level2Agg"); List<? extends Bucket> level2List = level2Terms.getBuckets(); ArrayList<JSONObject> secondsList = new ArrayList<>(); String bp_account_id2 = null; Integer statelevel2 = null; for (Bucket b2 : level2List) { JSONObject obj2 = new JSONObject(); String bp_id_level2 = b2.getKeyAsString(); if ("".equals(bp_id_level2)) { continue; } obj2.put("AccountID", bp_id_level2); TopHits topHits2 = b2.getAggregations().get("top2"); for (SearchHit hit : topHits2.getHits()) { Map<String, Object> source = hit.getSourceAsMap(); obj2.put("CompanyName", source.get("bp_id_level2_h_desc")); bp_account_id2 = (String) source.get("bp_account_id"); Integer integer = hashMap.get(bp_account_id2); if (integer == null) { integer = 3; } if (statelevel1 > integer) { statelevel1 = integer; obj1.put("state", statelevel1); hashMap.put(bp_account_id1, statelevel1); } if (integer != null) { obj2.put("state", integer); hashMap.put(bp_account_id2, integer); } else { obj2.put("state", 3); hashMap.put(bp_account_id2, 3); } break; } //第三级 Terms level3Terms = b2.getAggregations().get("level3Agg"); List<? extends Bucket> level3List = level3Terms.getBuckets(); ArrayList<JSONObject> thirdsList = new ArrayList<>(); statelevel2 = hashMap.get(bp_account_id2); Integer statelevel3 = null; String bp_account_id3 = null; for (Bucket b3 : level3List) { JSONObject obj3 = new JSONObject(); String bp_id_level3 = b3.getKeyAsString(); if ("".equals(bp_id_level3)) { continue; } obj3.put("AccountID", bp_id_level3); TopHits topHits3 = b3.getAggregations().get("top3"); for (SearchHit hit : topHits3.getHits()) { Map<String, Object> source = hit.getSourceAsMap(); obj3.put("CompanyName", source.get("bp_id_level3_h_desc")); bp_account_id3 = (String) source.get("bp_account_id"); Integer integer = hashMap.get(bp_account_id3); if (integer == null) { integer = 3; } if (statelevel2 > integer) { statelevel2 = integer; obj2.put("state", statelevel2); hashMap.put(bp_account_id2, statelevel2); if (statelevel1 > statelevel2) { statelevel1 = statelevel2; obj1.put("state", statelevel1); hashMap.put(bp_account_id1, statelevel1); } } obj3.put("state", integer); hashMap.put(bp_account_id3, integer); break; } //第四级 Terms level4Terms = b3.getAggregations().get("level4Agg"); List<? extends Bucket> level4List = level4Terms.getBuckets(); ArrayList<JSONObject> fourthList = new ArrayList<>(); Integer statelevel4 = null; statelevel3 = hashMap.get(bp_account_id3); String bp_account_id4 = null; for (Bucket b4 : level4List) { JSONObject obj4 = new JSONObject(); String bp_id_level4 = b4.getKeyAsString(); if ("".equals(bp_id_level4)) { continue; } obj4.put("AccountID", bp_id_level4); TopHits topHits4 = b4.getAggregations().get("top4"); for (SearchHit hit : topHits4.getHits()) { Map<String, Object> source = hit.getSourceAsMap(); obj4.put("CompanyName", source.get("bp_id_level4_h_desc")); bp_account_id4 = (String) source.get("bp_account_id"); Integer integer = hashMap.get(bp_account_id4); if (integer == null) { integer = 3; } if (statelevel3 > integer) { statelevel3 = integer; obj3.put("state", statelevel3); hashMap.put(bp_account_id3, statelevel3); if (statelevel2 > statelevel3) { statelevel2 = statelevel3; obj2.put("state", statelevel2); hashMap.put(bp_account_id2, statelevel2); if (statelevel1 > statelevel2) { statelevel1 = statelevel2; obj1.put("state", statelevel1); hashMap.put(bp_account_id1, statelevel1); } } } obj4.put("state", integer); hashMap.put(bp_account_id4, integer); break; } //第五级 Terms level5Terms = b4.getAggregations().get("level5Agg"); List<? extends Bucket> level5List = level5Terms.getBuckets(); ArrayList<JSONObject> fifthList = new ArrayList<>(); statelevel4 = hashMap.get(bp_account_id4); Integer statelevel5 = null; String bp_account_id5 = null; for (Bucket b5 : level5List) { JSONObject obj5 = new JSONObject(); String bp_id_level5 = b5.getKeyAsString(); if ("".equals(bp_id_level5)) { continue; } obj5.put("AccountID", bp_id_level5); TopHits topHits5 = b5.getAggregations().get("top5"); for (SearchHit hit : topHits5.getHits()) { Map<String, Object> source = hit.getSourceAsMap(); obj5.put("CompanyName", source.get("bp_id_level5_h_desc")); bp_account_id5 = (String) source.get("bp_account_id"); Integer integer = hashMap.get(bp_account_id5); if (integer == null) { integer = 3; } if (statelevel4 > integer) { statelevel4 = integer; obj4.put("state", statelevel4); hashMap.put(bp_account_id4, statelevel4); if (statelevel3 > statelevel4) { statelevel3 = statelevel4; obj3.put("state", statelevel3); hashMap.put(bp_account_id3, statelevel3); if (statelevel2 > statelevel3) { statelevel2 = statelevel3; obj2.put("state", statelevel2); hashMap.put(bp_account_id2, statelevel2); if (statelevel1 > statelevel2) { statelevel1 = statelevel2; obj1.put("state", statelevel1); hashMap.put(bp_account_id1, statelevel1); } } } } obj5.put("state", integer); hashMap.put(bp_account_id5, integer); break; } //第六级 Terms level6Terms = b5.getAggregations().get("level6Agg"); List<? extends Bucket> level6List = level6Terms.getBuckets(); ArrayList<JSONObject> sixthList = new ArrayList<>(); statelevel5 = hashMap.get(bp_account_id5); String bp_account_id6 = null; for (Bucket b6 : level6List) { JSONObject obj6 = new JSONObject(); String bp_id_level6 = b6.getKeyAsString(); if ("".equals(bp_id_level6)) { continue; } obj6.put("AccountID", bp_id_level6); TopHits topHits6 = b6.getAggregations().get("top6"); for (SearchHit hit : topHits6.getHits()) { Map<String, Object> source = hit.getSourceAsMap(); obj6.put("Company Name", source.get("bp_id_level6_h_desc")); bp_account_id6 = (String) source.get("bp_account_id"); Integer integer = hashMap.get(bp_account_id6); if (integer == null) { integer = 3; } if (statelevel5 > integer) { statelevel5 = integer; obj5.put("state", statelevel5); hashMap.put(bp_account_id5, statelevel5); if (statelevel4 > statelevel5) { statelevel4 = statelevel5; obj4.put("state", statelevel4); hashMap.put(bp_account_id4, statelevel4); if (statelevel3 > statelevel4) { statelevel3 = statelevel4; obj3.put("state", statelevel3); hashMap.put(bp_account_id3, statelevel3); if (statelevel2 > statelevel3) { statelevel2 = statelevel3; obj2.put("state", statelevel2); hashMap.put(bp_account_id2, statelevel2); if (statelevel1 > statelevel2) { statelevel1 = statelevel2; obj1.put("state", statelevel1); hashMap.put(bp_account_id1, statelevel1); } } } } } obj6.put("state", integer); hashMap.put(bp_account_id6, integer); break; } sixthList.add(obj6); } if (sixthList.size() != 0) { obj5.put("children", sixthList); obj5.put("state", statelevel5); } fifthList.add(obj5); } if (fifthList.size() != 0) { obj4.put("children", fifthList); obj4.put("state", statelevel4); } fourthList.add(obj4); } if (fourthList.size() != 0) { obj3.put("children", fourthList); obj3.put("state", statelevel3); } thirdsList.add(obj3); } if (thirdsList.size() != 0) { obj2.put("children", thirdsList); obj2.put("state", statelevel2); } secondsList.add(obj2); } if (secondsList.size() != 0) { obj1.put("children", secondsList); obj1.put("state", statelevel1); } break; } datas.put("datas", obj1); } } catch (Exception e) { log.error("getHierarchyTree query error : {}", e.toString()); } long endtime = System.currentTimeMillis(); log.info("getHierarchyTree cost {} milliseconds", endtime - starttime); return ServerResponse.createBySuccess(datas); } 前多后多型结构 public ServerResponse<?> getJoumeyChainItemList(String type, String search_id, String search_item, String search_product, String search_source_id) { long starttime = System.currentTimeMillis(); TransportClient client = ElasticSearchUtils.getClient(); // 返回json结果集 JSONObject data = new JSONObject(); Set<String> setBefore = new HashSet<>(); ArrayList<JSONObject> beforeDatas = new ArrayList<>(); Set<String> setAfter = new HashSet<>(); ArrayList<JSONObject> afterDatas = new ArrayList<>(); JSONObject currentData = new JSONObject(); String relationTableName=SearchConstants.CML_LEAD_TO_SERVICE_MAP_HEADER_NEW; String tableName; String tableNameBefore; String tableNameAfter; String search_field_name; String search_field_name_before; String search_field_name_after; String flag_field_name = ""; String flag_field_name_before = ""; String flag_field_name_after = ""; String result_field_name1; String result_field_item; String result_field_name2; String result_field_name3; String result_field_name4; String result_field_name5; String before_result_field_name1; String before_result_field_item; String before_result_field_name2; String before_result_field_name3; String before_result_field_name4; String before_result_field_name5; String before_type; String after_result_field_name1; String after_result_field_item; String after_result_field_name2; String after_result_field_name3; String after_result_field_name4; String after_result_field_name5; String after_type; try { /* if(type.equals("Campaign")){ beforeType=null; afterType="Lead"; search_field_name=""; search_field_name_before=""; search_field_name_after=""; flag_field_name_before=""; flag_field_name_after=""; tableName=""; result_field_name1=""; result_field_name2=""; result_field_name3=""; result_field_name4=""; result_field_name5=""; tableNameBefore=""; before_result_field_name1=""; before_result_field_name2=""; before_result_field_name3=""; before_result_field_name4=""; before_result_field_name5=""; tableNameAfter=""; after_result_field_name1=""; after_result_field_name2=""; after_result_field_name3=""; after_result_field_name4=""; after_result_field_name5=""; }else */ if (type.equals("Lead")) { search_field_name = "id"; search_field_name_before = ""; search_field_name_after = "opportunity_id"; flag_field_name = "lead_num"; flag_field_name_before = ""; flag_field_name_after = "opportunity_num"; tableName = SearchConstants.CML_SFDC_LEAD_NEW; result_field_name1 = "id"; result_field_item = ""; result_field_name2 = "createddate"; result_field_name3 = ""; result_field_name4 = ""; result_field_name5 = "status"; tableNameBefore = null; before_type = null; before_result_field_name1 = ""; before_result_field_item = ""; before_result_field_name2 = ""; before_result_field_name3 = ""; before_result_field_name4 = ""; before_result_field_name5 = ""; tableNameAfter = SearchConstants.CML_SFDC_OPPORTUNITY_NEW; after_type = "Oppt."; after_result_field_name1 = "opportunity_id"; after_result_field_item = "opportunity_item"; after_result_field_name2 = "created_date"; after_result_field_name3 = "amount"; after_result_field_name4 = "total_quantity"; after_result_field_name5 = "stage_name"; } else if (type.equals("Oppt.")) { search_field_name = "opportunity_id"; search_field_name_before = "id"; search_field_name_after = "bid_id"; flag_field_name = "opportunity_num"; flag_field_name_before = "lead_num"; flag_field_name_after = "bid_num"; tableName = SearchConstants.CML_SFDC_OPPORTUNITY_NEW; result_field_name1 = "opportunity_id"; result_field_item = "opportunity_item"; result_field_name2 = "created_date"; result_field_name3 = "amount"; result_field_name4 = "total_quantity"; result_field_name5 = "stage_name"; tableNameBefore = SearchConstants.CML_SFDC_LEAD_NEW; before_type = "Lead"; before_result_field_name1 = "id"; before_result_field_item = ""; before_result_field_name2 = "createddate"; before_result_field_name3 = ""; before_result_field_name4 = ""; before_result_field_name5 = "status"; tableNameAfter = SearchConstants.CML_SFDC_QUOTATION_NEW; after_type = "Quote"; after_result_field_name1 = "bid_id"; after_result_field_item = "bid_item"; after_result_field_name2 = "create_date"; after_result_field_name3 = ""; after_result_field_name4 = "quotation_quantity"; after_result_field_name5 = "bid_status"; }/*else if(type.equals("Deal")){ beforeType="Oppt"; afterType="Quote"; search_field_name=""; search_field_name_before=""; search_field_name_after=""; flag_field_name_before=""; flag_field_name_after=""; tableName=""; result_field_name1=""; result_field_name2=""; result_field_name3=""; result_field_name4=""; result_field_name5=""; tableNameBefore=SearchConstants.CML_SFDC_OPPORTUNITY_NEW; before_result_field_name1=""; before_result_field_name2=""; before_result_field_name3=""; before_result_field_name4=""; before_result_field_name5=""; tableNameAfter=""; after_result_field_name1=""; after_result_field_name2=""; after_result_field_name3=""; after_result_field_name4=""; after_result_field_name5=""; }*/ else if (type.equals("Quote")) { before_type = "Oppt."; after_type = "Contract"; search_field_name = "bid_id"; search_field_name_before = "opportunity_id"; search_field_name_after = "contract_num"; flag_field_name = "bid_num"; flag_field_name_before = "opportunity_num"; flag_field_name_after = "contract_num"; tableName = SearchConstants.CML_SFDC_QUOTATION_NEW; result_field_name1 = "bid_id"; result_field_item = "bid_item"; result_field_name2 = "create_date"; result_field_name3 = ""; result_field_name4 = "quotation_quantity"; result_field_name5 = "bid_status"; tableNameBefore = SearchConstants.CML_SFDC_OPPORTUNITY_NEW; before_result_field_name1 = "opportunity_id"; before_result_field_item = "opportunity_item"; before_result_field_name2 = "created_date"; before_result_field_name3 = "amount"; before_result_field_name4 = "total_quantity"; before_result_field_name5 = "stage_name"; tableNameAfter = SearchConstants.CML_SALES_CNTR_CONTRACT_NEW; after_result_field_name1 = "contract_num"; after_result_field_item = "contract_item"; after_result_field_name2 = "contract_create_date"; after_result_field_name3 = "contract_net_vaule_usd"; after_result_field_name4 = "contract_qty"; after_result_field_name5 = "contract_status"; } else if (type.equals("Contract")) { search_field_name = "contract_num"; search_field_name_before = "bid_id"; search_field_name_after = "sales_order_number"; flag_field_name = "contract_num"; flag_field_name_before = "bid_num"; flag_field_name_after = "sales_order_num"; tableName = SearchConstants.CML_SALES_CNTR_CONTRACT_NEW; result_field_name1 = "contract_num"; result_field_item = "contract_item"; result_field_name2 = "contract_create_date"; result_field_name3 = "contract_net_vaule_usd"; result_field_name4 = "contract_qty"; result_field_name5 = "contract_status"; tableNameBefore = SearchConstants.CML_SFDC_QUOTATION_NEW; before_type = "Quote"; before_result_field_name1 = "bid_id"; before_result_field_item = "bid_item"; before_result_field_name2 = "create_date"; before_result_field_name3 = ""; before_result_field_name4 = "quotation_quantity"; before_result_field_name5 = "bid_status"; tableNameAfter = SearchConstants.CML_SALES_SO_DETAIL; after_type = "Order"; after_result_field_name1 = "sales_order_number"; after_result_field_item = "sales_order_item"; after_result_field_name2 = "sales_order_create_date"; after_result_field_name3 = "sales_order_amount"; after_result_field_name4 = "sales_order_qty"; after_result_field_name5 = ""; } else if (type.equals("Order")) { search_field_name = "sales_order_number"; search_field_name_before = "contract_num"; search_field_name_after = "billing_num"; flag_field_name = "sales_order_num"; flag_field_name_before = "contract_num"; flag_field_name_after = "billing_num"; //flag_field_name_after = "delivery_num"; tableName = SearchConstants.CML_SALES_SO_DETAIL; result_field_name1 = "sales_order_number"; result_field_item = "sales_order_item"; result_field_name2 = "sales_order_create_date"; result_field_name3 = "sales_order_amount"; result_field_name4 = "sales_order_qty"; result_field_name5 = ""; tableNameBefore = SearchConstants.CML_SALES_CNTR_CONTRACT_NEW; before_type = "Contract"; before_result_field_name1 = "contract_num"; before_result_field_item = "contract_item"; before_result_field_name2 = "contract_create_date"; before_result_field_name3 = "contract_net_vaule_usd"; before_result_field_name4 = "contract_qty"; before_result_field_name5 = "contract_status"; /*tableNameAfter = SearchConstants.CML_GSC_SHIP_DETAIL_SCI; after_type = "Shipment"; after_result_field_name1 = "delivery_num"; after_result_field_item = "delivery_item"; after_result_field_name2 = "create_date"; after_result_field_name3 = ""; after_result_field_name4 = ""; after_result_field_name5 = "status";*/ tableNameAfter = SearchConstants.CML_FIN_BILL_CUSTOMER_BASE; after_type = "Billing"; after_result_field_name1 = "billing_num"; after_result_field_item = "billing_item"; after_result_field_name2 = "billing_date"; after_result_field_name3 = "sdrev"; after_result_field_name4 = "ca"; after_result_field_name5 = ""; } /*else if (type.equals("Shipment")) { search_field_name = "delivery_num"; search_field_name_before = "sales_order_number"; search_field_name_after = "billing_num"; flag_field_name = "delivery_num"; flag_field_name_before = "sales_order_num"; flag_field_name_after = "billing_num"; tableName = SearchConstants.CML_GSC_SHIP_DETAIL_SCI; result_field_name1 = "delivery_num"; result_field_item = "delivery_item"; result_field_name2 = "create_date"; result_field_name3 = ""; result_field_name4 = ""; result_field_name5 = "status"; tableNameBefore = SearchConstants.CML_SALES_SO_DETAIL; before_type = "Order"; before_result_field_name1 = "sales_order_number"; before_result_field_item = "sales_order_item"; before_result_field_name2 = "sales_order_create_date"; before_result_field_name3 = "sales_order_amount"; before_result_field_name4 = "sales_order_qty"; before_result_field_name5 = ""; tableNameAfter = SearchConstants.CML_FIN_BILL_CUSTOMER_BASE; after_type = "Billing"; after_result_field_name1 = "billing_num"; after_result_field_item = "billing_item"; after_result_field_name2 = "billing_date"; after_result_field_name3 = "sdrev"; after_result_field_name4 = "ca"; after_result_field_name5 = ""; }*/ else if (type.equals("Billing")) { search_field_name = "billing_num"; search_field_name_before = "sales_order_number"; search_field_name_after = "service_order_num"; flag_field_name = "billing_num"; flag_field_name_before = "sales_order_num"; //flag_field_name_before = "delivery_num"; flag_field_name_after = ""; tableName = SearchConstants.CML_FIN_BILL_CUSTOMER_BASE; result_field_name1 = "billing_num"; result_field_item = "billing_item"; result_field_name2 = "billing_date"; result_field_name3 = "sdrev"; result_field_name4 = "ca"; result_field_name5 = ""; tableNameBefore = SearchConstants.CML_SALES_SO_DETAIL; before_type = "Order"; before_result_field_name1 = "sales_order_number"; before_result_field_item = "sales_order_item"; before_result_field_name2 = "sales_order_create_date"; before_result_field_name3 = "sales_order_amount"; before_result_field_name4 = "sales_order_qty"; before_result_field_name5 = ""; /*tableNameBefore = SearchConstants.CML_GSC_SHIP_DETAIL_SCI; before_type = "Shipment"; before_result_field_name1 = "delivery_num"; before_result_field_item = "delivery_item"; before_result_field_name2 = "create_date"; before_result_field_name3 = ""; before_result_field_name4 = ""; before_result_field_name5 = "status";*/ tableNameAfter = SearchConstants.CML_SRV_SERVICE_ORDER; after_type = "Service"; after_result_field_name1 = "service_order_num"; after_result_field_item = ""; after_result_field_name2 = "service_create_date"; after_result_field_name3 = ""; after_result_field_name4 = ""; after_result_field_name5 = ""; } else if (type.equals("Service")) { search_field_name = "service_order_num"; search_field_name_before = "billing_num"; search_field_name_after = ""; flag_field_name = "service_order_num"; flag_field_name_before = "billing_num"; flag_field_name_after = ""; tableName = SearchConstants.CML_SRV_SERVICE_ORDER; result_field_name1 = "service_order_num"; result_field_item = ""; result_field_name2 = "service_create_date"; result_field_name3 = ""; result_field_name4 = ""; result_field_name5 = ""; tableNameBefore = SearchConstants.CML_FIN_BILL_CUSTOMER_BASE; before_type = "Billing"; before_result_field_name1 = "billing_num"; before_result_field_item = "billing_item"; before_result_field_name2 = "billing_date"; before_result_field_name3 = "sdrev"; before_result_field_name4 = "ca"; before_result_field_name5 = ""; tableNameAfter = null; after_type = null; after_result_field_name1 = ""; after_result_field_item = ""; after_result_field_name2 = ""; after_result_field_name3 = ""; after_result_field_name4 = ""; after_result_field_name5 = ""; }/*else if(type.equals("Survey")){ beforeType="Service"; after_type=null; search_field_name=""; search_field_name_before=""; search_field_name_after=""; flag_field_name_before=""; flag_field_name_after=""; tableName=""; result_field_name1=""; result_field_name2=""; result_field_name3=""; result_field_name4=""; result_field_name5=""; tableNameBefore=""; before_result_field_name1=""; before_result_field_name2=""; before_result_field_name3=""; before_result_field_name4=""; before_result_field_name5=""; tableNameAfter=""; after_result_field_name1=""; after_result_field_name2=""; after_result_field_name3=""; after_result_field_name4=""; after_result_field_name5=""; }*/ else{ search_field_name = ""; search_field_name_before = ""; search_field_name_after = ""; flag_field_name = ""; flag_field_name_before = ""; flag_field_name_after = ""; tableName = null; result_field_name1 = ""; result_field_item = ""; result_field_name2 = ""; result_field_name3 = ""; result_field_name4 = ""; result_field_name5 = ""; tableNameBefore = null; before_type = ""; before_result_field_name1 = ""; before_result_field_item = ""; before_result_field_name2 = ""; before_result_field_name3 = ""; before_result_field_name4 = ""; before_result_field_name5 = ""; tableNameAfter = null; after_type = null; after_result_field_name1 = ""; after_result_field_item = ""; after_result_field_name2 = ""; after_result_field_name3 = ""; after_result_field_name4 = ""; after_result_field_name5 = ""; } if (tableName == null) { data.put("current", currentData); data.put("before", beforeDatas); data.put("after", afterDatas); return ServerResponse.createBySuccess(data); } if("Service".equals(type)){ relationTableName=SearchConstants.CML_BILL_TO_SERVICE_MAP_HEADER_NEW; } SearchRequestBuilder dealRequestBuilder = client.prepareSearch().setIndices(relationTableName); dealRequestBuilder.setQuery(QueryBuilders.queryStringQuery(search_id).field(flag_field_name + ".keyword")).setSize(5000); SearchResponse response = dealRequestBuilder.setSize(5000).execute().actionGet(); SearchHit[] hits = response.getHits().getHits(); for (SearchHit hit : hits) { Map<String, Object> sourceAsMap = hit.getSourceAsMap(); String bf_value = (String) sourceAsMap.get(flag_field_name_before); String af_value = (String) sourceAsMap.get(flag_field_name_after); if (bf_value != null && !"".equals(bf_value)) { setBefore.add(bf_value); } if (af_value != null && !"".equals(af_value)) { setAfter.add(af_value); } } if ("Billing".equals(type)){ relationTableName=SearchConstants.CML_BILL_TO_SERVICE_MAP_HEADER_NEW; flag_field_name_before=""; flag_field_name_after="service_order_num"; SearchRequestBuilder billintBuilder = client.prepareSearch().setIndices(relationTableName); billintBuilder.setQuery(QueryBuilders.queryStringQuery(search_id).field(flag_field_name + ".keyword")).setSize(5000); SearchResponse billingResponse = billintBuilder.setSize(5000).execute().actionGet(); SearchHit[] billingHits = billingResponse.getHits().getHits(); for (SearchHit hit : billingHits) { Map<String, Object> sourceAsMap = hit.getSourceAsMap(); String bf_value = (String) sourceAsMap.get(flag_field_name_before); String af_value = (String) sourceAsMap.get(flag_field_name_after); if (bf_value != null && !"".equals(bf_value)) { setBefore.add(bf_value); } if (af_value != null && !"".equals(af_value)) { setAfter.add(af_value); } } } Thread currentThread=new Thread(new Runnable() { public void run() { //查询当前数据 SearchRequestBuilder dealRequestBuilder2 = client.prepareSearch().setIndices(tableName); BoolQueryBuilder must = QueryBuilders.boolQuery(); if ("Lead".equals(type) || "".equals(result_field_item)) { must.must(QueryBuilders.queryStringQuery(search_id).field(search_field_name + ".keyword")); } else if ("Billing".equals(type)) { must.must(QueryBuilders.matchPhraseQuery(search_field_name + ".keyword",search_id)) .must(QueryBuilders.matchPhraseQuery(result_field_item + ".keyword",search_item)) .must(QueryBuilders.matchPhraseQuery("prod_material.keyword" , search_product)) .must(QueryBuilders.matchPhraseQuery("source_id.keyword" ,search_source_id)); } else { must.must(QueryBuilders.matchPhraseQuery(search_field_name + ".keyword",search_id)) .must(QueryBuilders.matchPhraseQuery(result_field_item + ".keyword",search_item)); } dealRequestBuilder2.setQuery(must); SearchResponse respon2 = dealRequestBuilder2.setSize(5000).execute().actionGet(); SearchHit[] hits2 = respon2.getHits().getHits(); ArrayList<JSONObject> c1 = new ArrayList<>(); for (SearchHit hit2 : hits2) { Map<String, Object> sourceAsMap = hit2.getSourceAsMap(); if (!"".equals(result_field_name1)) { Object currentvalue1 = sourceAsMap.get(result_field_name1); if (!"".equals(currentvalue1)) { JSONObject c = new JSONObject(); c.put("key", "No."); c.put("value", currentvalue1); c1.add(c); } } if (!"".equals(result_field_item)) { Object currentitemvalue1 = sourceAsMap.get(result_field_item); JSONObject c = new JSONObject(); c.put("key", "Item"); c.put("value", currentitemvalue1); c1.add(c); } if (!"".equals(result_field_name2)) { Object currentvalue2 = sourceAsMap.get(result_field_name2); if (!"".equals(currentvalue2)) { JSONObject c = new JSONObject(); c.put("key", "Create Date"); c.put("value", currentvalue2); c1.add(c); } } if (!"".equals(result_field_name3)) { Object currentvalue3 = sourceAsMap.get(result_field_name3); Double format = formatToDouble(currentvalue3); JSONObject c = new JSONObject(); c.put("key", "Amount"); c.put("value", format); c.put("tofixed", 2); c1.add(c); } if (!"".equals(result_field_name4)) { Object currentvalue4 = sourceAsMap.get(result_field_name4); Integer format = formatToInteger(currentvalue4); JSONObject c = new JSONObject(); c.put("key", "Qty."); c.put("value", format); c.put("pf", 0); c1.add(c); } if (!"".equals(result_field_name5)) { Object currentvalue5 = sourceAsMap.get(result_field_name5); if (!"".equals(currentvalue5)) { JSONObject c = new JSONObject(); c.put("key", "Status"); c.put("value", currentvalue5); c1.add(c); } } if ("Billing".equals(type)) { JSONObject c = new JSONObject(); c.put("key", "Product"); c.put("value", sourceAsMap.get("prod_material")); c1.add(c); JSONObject cc = new JSONObject(); cc.put("key", "Source ID"); cc.put("value", sourceAsMap.get("source_id")); c1.add(cc); } break; } currentData.put("name", type); currentData.put("children", c1); } }); Thread beforeThread = new Thread(new Runnable() { public void run() { if (setBefore.size() != 0) { //查询之前数据集合 SearchRequestBuilder dealRequestBuilder3 = client.prepareSearch().setIndices(tableNameBefore); dealRequestBuilder3.setQuery(QueryBuilders.termsQuery(search_field_name_before, setBefore)).setSize(5000); SearchResponse respon3 = dealRequestBuilder3.setSize(5000).execute().actionGet(); SearchHit[] hits3 = respon3.getHits().getHits(); for (SearchHit hit3 : hits3) { JSONObject bfObj = new JSONObject(); ArrayList<JSONObject> bfList = new ArrayList<>(); Map<String, Object> beforeSourceAsMap = hit3.getSourceAsMap(); if (!"".equals(before_result_field_name1)) { Object beforevalue1 = beforeSourceAsMap.get(before_result_field_name1); if (!"".equals(beforevalue1) && beforevalue1 != null) { JSONObject bf = new JSONObject(); bf.put("key", "No."); bf.put("value", beforevalue1); bfList.add(bf); } } if (!"".equals(before_result_field_item)) { Object beforeitemvalue1 = beforeSourceAsMap.get(before_result_field_item); JSONObject bf = new JSONObject(); bf.put("key", "Item"); bf.put("value", beforeitemvalue1); bfList.add(bf); } if (!"".equals(before_result_field_name2)) { Object beforevalue2 = beforeSourceAsMap.get(before_result_field_name2); if (!"".equals(beforevalue2) && beforevalue2 != null) { JSONObject bf = new JSONObject(); bf.put("key", "Create Date"); bf.put("value", beforevalue2); bfList.add(bf); } } if (!"".equals(before_result_field_name3)) { Object beforevalue3 = beforeSourceAsMap.get(before_result_field_name3); Double format = formatToDouble(beforevalue3); JSONObject bf = new JSONObject(); bf.put("key", "Amount"); bf.put("value", format); bf.put("tofixed", 2); bfList.add(bf); } if (!"".equals(before_result_field_name4)) { Object beforevalue4 = beforeSourceAsMap.get(before_result_field_name4); Integer format = formatToInteger(beforevalue4); JSONObject bf = new JSONObject(); bf.put("key", "Qty."); bf.put("value", format); bf.put("pf", 0); bfList.add(bf); } if (!"".equals(before_result_field_name5)) { Object beforevalue5 = beforeSourceAsMap.get(before_result_field_name5); if (!"".equals(beforevalue5) && beforevalue5 != null) { JSONObject bf = new JSONObject(); bf.put("key", "Status"); bf.put("value", beforevalue5); bfList.add(bf); } } if ("Billing".equals(before_type)) { JSONObject bf = new JSONObject(); bf.put("key", "Product"); bf.put("value", beforeSourceAsMap.get("prod_material")); bfList.add(bf); JSONObject bf2 = new JSONObject(); bf2.put("key", "Source ID"); bf2.put("value", beforeSourceAsMap.get("source_id")); bfList.add(bf2); } bfObj.put("name", before_type); bfObj.put("children", bfList); if (hits3.length != 0) { beforeDatas.add(bfObj); } } } } }); Thread afterThread = new Thread(new Runnable() { public void run() { if (setAfter.size() != 0) { //查询后数据集合 SearchRequestBuilder dealRequestBuilder4 = client.prepareSearch().setIndices(tableNameAfter); dealRequestBuilder4.setQuery(QueryBuilders.termsQuery(search_field_name_after, setAfter)).setSize(5000); SearchResponse respon4 = dealRequestBuilder4.setSize(5000).execute().actionGet(); SearchHit[] hits4 = respon4.getHits().getHits(); for (SearchHit hit4 : hits4) { JSONObject afObj = new JSONObject(); ArrayList<JSONObject> afList = new ArrayList<>(); Map<String, Object> afterSourceAsMap = hit4.getSourceAsMap(); if (!"".equals(after_result_field_name1)) { Object aftervalue1 = afterSourceAsMap.get(after_result_field_name1); if (!"".equals(aftervalue1) && aftervalue1 != null) { JSONObject af = new JSONObject(); af.put("key", "No."); af.put("value", aftervalue1); afList.add(af); } } if (!"".equals(after_result_field_item)) { Object afteritemvalue1 = afterSourceAsMap.get(after_result_field_item); JSONObject af = new JSONObject(); af.put("key", "Item"); af.put("value", afteritemvalue1); afList.add(af); } if (!"".equals(after_result_field_name2)) { Object aftervalue2 = afterSourceAsMap.get(after_result_field_name2); if (!"".equals(aftervalue2) && aftervalue2 != null) { JSONObject af = new JSONObject(); af.put("key", "Create Date"); af.put("value", aftervalue2); afList.add(af); } } if (!"".equals(after_result_field_name3)) { Object aftervalue3 = afterSourceAsMap.get(after_result_field_name3); Double format = formatToDouble(aftervalue3); JSONObject af = new JSONObject(); af.put("key", "Amount"); af.put("value", format); af.put("tofixed", 2); afList.add(af); } if (!"".equals(after_result_field_name4)) { Object aftervalue4 = afterSourceAsMap.get(after_result_field_name4); Integer format = formatToInteger(aftervalue4); JSONObject af = new JSONObject(); af.put("key", "Qty."); af.put("value", format); af.put("pf", 0); afList.add(af); } if (!"".equals(after_result_field_name5)) { Object aftervalue5 = afterSourceAsMap.get(after_result_field_name5); if (!"".equals(aftervalue5) && aftervalue5 != null) { JSONObject af = new JSONObject(); af.put("key", "Status"); af.put("value", aftervalue5); afList.add(af); } } if ("Billing".equals(after_type)) { JSONObject af = new JSONObject(); af.put("key", "Product"); af.put("value", afterSourceAsMap.get("prod_material")); afList.add(af); JSONObject af2 = new JSONObject(); af2.put("key", "Source ID"); af2.put("value", afterSourceAsMap.get("source_id")); afList.add(af2); } afObj.put("name", after_type); afObj.put("children", afList); if (hits4.length != 0) { afterDatas.add(afObj); } } } } }); currentThread.start(); beforeThread.start(); afterThread.start(); currentThread.join(); beforeThread.join(); afterThread.join(); data.put("current", currentData); data.put("before", beforeDatas); data.put("after", afterDatas); } catch (Exception e) { log.error("getJoumeyChainItemList query error : {}", e.toString()); } long endtime = System.currentTimeMillis(); log.info("getJoumeyChainItemList cost {} milliseconds", endtime - starttime); return ServerResponse.createBySuccess(data); } sum聚合(min,max,count聚合类似) BoolQueryBuilder boolQueryBuilder1 = boolQueryBuilder_Id(bp_id, "end_customer_id.keyword", "",Subsidiary_ids); String month = getOneYearMonth().get(2).substring(0, 4) + getOneYearMonth().get(2).substring(5, 7); boolQueryBuilder1.must(termsQuery("file_month.keyword", month)); SearchRequestBuilder dealRequestBuilder1 = client.prepareSearch().setIndices(SearchConstants.CML_SRV_SERVICE_OPERATION_MONTH_NEW) .setQuery(boolQueryBuilder1) .addAggregation(AggregationBuilders.sum("dt_claim_count").field("dt_claim_count")) .addAggregation(AggregationBuilders.sum("dt_install_base").field("dt_install_base")) .addAggregation(AggregationBuilders.sum("nb_claim_count").field("nb_claim_count")) .addAggregation(AggregationBuilders.sum("nb_install_base").field("nb_install_base")) .addAggregation(AggregationBuilders.sum("ftf_made_numerator").field("ftf_made_numerator")) .addAggregation(AggregationBuilders.sum("ftf_made_denominator").field("ftf_made_denominator")) .addAggregation(AggregationBuilders.sum("tat_made_numerator").field("tat_made_numerator")) .addAggregation(AggregationBuilders.sum("tat_made_denominator").field("tat_made_denominator")); SearchResponse response1 = dealRequestBuilder1.setSize(1).execute().actionGet(); JSONObject obj5 = new JSONObject(); obj5.put("num", ""); obj5.put("name","DT RA%"); obj5.put("interest", 0); obj5.put("month", getOneYearMonth().get(2)); JSONObject obj6 = new JSONObject(); obj6.put("num", ""); obj6.put("name","NB RA%"); obj6.put("interest", 0); obj6.put("month", getOneYearMonth().get(2)); JSONObject obj7 = new JSONObject(); obj7.put("num", ""); obj7.put("name","First Time Ftx%"); obj7.put("interest", 0); obj7.put("month", getOneYearMonth().get(2)); JSONObject obj8 = new JSONObject(); obj8.put("num", ""); obj8.put("name","Target Arrival Time%"); obj8.put("interest", 0); obj8.put("month", getOneYearMonth().get(2)); Sum dt1 = response1.getAggregations().get("dt_claim_count"); Sum dt2 = response1.getAggregations().get("dt_install_base"); Sum nb1 = response1.getAggregations().get("nb_claim_count"); Sum nb2 = response1.getAggregations().get("dt_install_base"); Sum ftf1 = response1.getAggregations().get("ftf_made_numerator"); Sum ftf2 = response1.getAggregations().get("ftf_made_denominator"); Sum tat1 = response1.getAggregations().get("tat_made_numerator"); Sum tat2 = response1.getAggregations().get("tat_made_denominator"); if (dt1.getValue() != 0 && dt1.getValue() != 0.0) { obj5.put("interest", dt1.getValue()/dt2.getValue()); } else { obj5.put("interest", 0); } if(obj5.get("interest").toString().equals("Infinity")){ obj5.put("interest", 0); } if (nb1.getValue() != 0 && nb1.getValue() != 0.0) { obj6.put("interest", nb1.getValue()/nb2.getValue()); } else { obj6.put("interest", 0); } if(obj6.get("interest").toString().equals("Infinity")){ obj6.put("interest", 0); } if (ftf1.getValue() != 0 && ftf1.getValue() != 0.0) { obj7.put("interest", ftf1.getValue()/ftf2.getValue()); } else { obj7.put("interest", 0); } if(obj7.get("interest").toString().equals("Infinity")){ obj7.put("interest", 0); } if (tat1.getValue() != 0 && tat1.getValue() != 0.0) { obj8.put("interest", tat1.getValue()/tat2.getValue()); } else { obj8.put("interest", 0); } if(obj8.get("interest").toString().equals("Infinity")){ obj8.put("interest", 0); } json.add(obj5); json.add(obj6); json.add(obj7); json.add(obj8); } catch (Exception e) { log.error("getMoreDetailByOverall query error : {}", e.toString()); } long endtime = System.currentTimeMillis(); log.info("getMoreDetailByOverall cost {} milliseconds", endtime - starttime); return ServerResponse.createBySuccess(json); } 根据时间聚合以及count聚合 //根据itCode和时间查询各个页面的点击次数 @Override public ServerResponse<?> getPageUsingTime(String itCode, String type, String begin, String end, List<String> pageNames) { //解析pageName HashMap<String, String> parseMap = new HashMap<>(); List<ParseMap> list = pageNameDao.getParseMap(); for (ParseMap map : list) { parseMap.put(map.getKey(), map.getValue()); } long startTime = System.currentTimeMillis(); if (pageNames.size() == 0) { pageNames = pageNameDao.getAllPage(); } List<String> dBpageNames = pageNameDao.getDBpage(pageNames); JSONObject data = new JSONObject(); //往columns填数据 List<String> columns = new ArrayList<>(); columns.add("x-alias"); columns.addAll(pageNames); ArrayList<JSONObject> rows = new ArrayList<>(); try { TransportClient client = ElasticSearchUtils.getClient(); String tableName = "cdp_behavior_log_test"; DateHistogramInterval typeValue = null; BoolQueryBuilder mustQuery = QueryBuilders.boolQuery(); if ("day".equals(type)) { begin = begin + " 00:00:00:000"; end = end + " 23:59:59:999"; typeValue = DateHistogramInterval.DAY; mustQuery.must(QueryBuilders.rangeQuery("opreteTime").gte(begin).lte(end)); } else if ("week".equals(type)) { begin = DateUtils.getFirstDayOfWeek(Integer.valueOf(begin.substring(0, 4)), Integer.valueOf(begin.substring(5))) + " 00:00:00:000"; end = DateUtils.getFirstDayOfWeek(Integer.valueOf(end.substring(0, 4)), Integer.valueOf(end.substring(5))) + " 23:59:59:999"; typeValue = DateHistogramInterval.WEEK; mustQuery.must(QueryBuilders.rangeQuery("opreteTime").gte(begin).lte(end)); } else if ("month".equals(type)) { String[] month = DateUtils.getMonth(new String[]{begin, end}); begin = month[0]; end = month[1]; typeValue = DateHistogramInterval.MONTH; mustQuery.must(QueryBuilders.rangeQuery("opreteTime").gte(begin).lte(end)); } else if ("quarter".equals(type)) { String[] startQuarter = DateUtils.getQuarter(begin); String[] endQuarter = DateUtils.getQuarter(end); begin = startQuarter[0]; end = endQuarter[1]; typeValue = DateHistogramInterval.QUARTER; mustQuery.must(QueryBuilders.rangeQuery("opreteTime").gte(begin).lte(end)); } else if ("year".equals(type)) { String[] year = DateUtils.getYear(new String[]{begin, end}); begin = year[0]; end = year[1]; typeValue = DateHistogramInterval.YEAR; mustQuery.must(QueryBuilders.rangeQuery("opreteTime").gte(begin).lte(end)); } mustQuery.must(QueryBuilders.matchPhraseQuery("userName", itCode)); mustQuery.must(QueryBuilders.termsQuery("pageName", dBpageNames)); SearchRequestBuilder dealRequestBuilder = client.prepareSearch().setIndices(tableName); AggregationBuilder countBuilder = AggregationBuilders.count("opreteTimeCount").field("opreteTime"); dealRequestBuilder.setQuery(mustQuery) .addAggregation(AggregationBuilders.dateHistogram("timeAgg").field("opreteTime") .dateHistogramInterval(typeValue).extendedBounds(new ExtendedBounds(begin, end)).order(BucketOrder.key(true)) .subAggregation(AggregationBuilders.terms("pageName").field("pageName").size(Integer.MAX_VALUE).order(BucketOrder.key(true)) .subAggregation(countBuilder))); SearchResponse response = dealRequestBuilder.setSize(10).execute().actionGet(); Histogram date_histogram = response.getAggregations().get("timeAgg"); List<? extends Histogram.Bucket> buckets = date_histogram.getBuckets(); for (Histogram.Bucket b1 : buckets) { //获取当前分组时间 String time = b1.getKeyAsString(); Terms pageNameTerms = b1.getAggregations().get("pageName"); List<? extends Terms.Bucket> pageNameBuckets = pageNameTerms.getBuckets(); HashMap<String, Long> logTimeMap = new HashMap<>(); for (Terms.Bucket pageNameBucket : pageNameBuckets) { //获取当前分组页面 String dBPageName = pageNameBucket.getKeyAsString(); ValueCount valueCount = pageNameBucket.getAggregations().get("opreteTimeCount"); long value = valueCount.getValue(); logTimeMap.put(parseMap.get(dBPageName), value); } JSONObject row = new JSONObject(); if ("day".equals(type)) { time = time.substring(0, 10); } else if ("week".equals(type)) { String dayTime = time.substring(0, 10); String year = time.substring(0, 4); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = sdf.parse(dayTime); } catch (ParseException e) { e.printStackTrace(); } Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.setTime(date); time = year + "-" + (calendar.get(Calendar.WEEK_OF_YEAR) + 1) + ""; } else if ("month".equals(type)) { time = time.substring(0, 7); } else if ("quarter".equals(type)) { String month = time.substring(5, 7); String year = time.substring(0, 4); if ("01".equals(month)) { time = year + "-Q1"; } else if ("04".equals(month)) { time = year + "-Q2"; } else if ("07".equals(month)) { time = year + "-Q3"; } else { time = year + "-Q4"; } } else if ("year".equals(type)) { time = time.substring(0, 4); } row.put("x-alias", time); //填充无数据的情况 for (String column : columns) { if (!logTimeMap.containsKey(column) && !"x-alias".equals(column)) { logTimeMap.put(column, 0L); } } row.putAll(logTimeMap); rows.add(row); } data.put("columns", columns); data.put("rows", rows); int activeDays = getActiveDays(itCode, begin, end); data.put("activeDays", activeDays); } catch (Exception e) { logger.error("interfaceAll search error : {}", e.toString()); } long endTime = System.currentTimeMillis(); logger.info("interfaceAll {} milliseconds", endTime - startTime); return ServerResponse.createBySuccess(data); }
最新回复(0)