等级关系树(这里以六级为例)
public ServerResponse
<?> getHierarchyTree(String bp_account_id
) {
long starttime
= System
.currentTimeMillis();
TransportClient client
= ElasticSearchUtils
.getClient();
JSONObject datas
= new JSONObject();
try {
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");
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) {
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);
}
}
}
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();
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("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("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";
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_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_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
= "";
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{
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聚合
@Override
public ServerResponse
<?> getPageUsingTime(String itCode
, String type
, String begin
, String end
, List
<String> pageNames
) {
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();
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
);
}