Browse Source

olap 视图ES查询 相关接口

jkzlzhoujie 6 years ago
parent
commit
411e726d55

+ 11 - 6
src/main/java/com/yihu/quota/controller/ViewController.java

@ -57,7 +57,7 @@ public class ViewController extends BaseController {
    private AggregationBuildHandler aggregationBuildHandler;
    @ApiOperation(value = "添加视图")
    @RequestMapping(value = ServiceApi.StatisticView.View.Add, method = RequestMethod.GET)
    @RequestMapping(value = "/add", method = RequestMethod.GET)
    public Envelop add(
            @ApiParam(name = "code", value = "视图code", required = true)
            @RequestParam(value = "code", required = true) String code,
@ -90,7 +90,7 @@ public class ViewController extends BaseController {
    }
    @ApiOperation(value = "删除视图")
    @RequestMapping(value = ServiceApi.StatisticView.View.Delete, method = RequestMethod.DELETE)
    @RequestMapping(value = "/del", method = RequestMethod.DELETE)
    public Envelop delete(
            @ApiParam(name = "id", value = "ID", required = true)
            @RequestParam(value = "id", required = true) int id){
@ -101,7 +101,7 @@ public class ViewController extends BaseController {
    }
    @ApiOperation(value = "获取视图的统计结果")
    @RequestMapping(value = ServiceApi.StatisticView.View.GetViewStatisticData, method = RequestMethod.GET)
    @RequestMapping(value = "/getViewStatisticData", method = RequestMethod.GET)
    public Envelop getViewStatisticData(
            @ApiParam(name = "viewCode", value = "视图编码", required = true)
            @RequestParam(value = "viewCode") String viewCode) {
@ -142,12 +142,13 @@ public class ViewController extends BaseController {
//                    .subAggregation(AggregationBuilders.terms("性别_terms").field("sex")
//                                    .subAggregation(AggregationBuilders.count("count_result").field("rowkey"))
//                    );
            AbstractAggregationBuilder firstAgg = aggregationBuildHandler.addAggregationBuilder("count","count_result","rowkey");
            AbstractAggregationBuilder secondAgg = aggregationBuildHandler.addTermAggregationBuilder("合计_性别_terms","sex","count", "count_result", "rowkey");
            AbstractAggregationBuilder firstAgg = aggregationBuildHandler.addAggregationBuilder("count","all_count_result","rowkey");
            AbstractAggregationBuilder secondAgg = aggregationBuildHandler.addTermAggregationBuilder("合计_性别_terms","sex","count", "sex_count_result", "rowkey");
            AbstractAggregationBuilder threeAgg = aggregationBuildHandler.addTermsBuilder("区县_terms", "area.town")
                    .subAggregation(aggregationBuildHandler.addAggregationBuilder("count", "合计_count_result", "rowkey"))
                    .subAggregation(aggregationBuildHandler.addTermsBuilder("性别_terms","sex")
                                    .subAggregation(aggregationBuildHandler.addAggregationBuilder("count", "count_result", "rowkey"))
                                    .subAggregation(aggregationBuildHandler.addAggregationBuilder("count", "town_sex_count_result", "rowkey"))
                    );
            LinkedList<AbstractAggregationBuilder> aggBuildList = new LinkedList<>();
@ -155,6 +156,10 @@ public class ViewController extends BaseController {
            aggBuildList.add(secondAgg);
            aggBuildList.add(threeAgg);
            List<Map<String, Object>> resultList = aggregationBuildHandler.structAggregationQuery(client,"patient_event","info", boolQueryBuilder, aggBuildList);
            envelop.setDetailModelList(resultList);
        }catch (Exception e){
            e.printStackTrace();

+ 56 - 6
src/main/java/com/yihu/quota/util/AggregationBuildHandler.java

@ -1,5 +1,6 @@
package com.yihu.quota.util;
import com.yihu.quota.vo.ViewDataModel;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
@ -116,10 +117,13 @@ public class AggregationBuildHandler {
            parsingAggregation(resultList,aggregation);
        }
        client.close();
        return resultList;
        LinkedList<String> rowDimensionList = new LinkedList<>();
        rowDimensionList.add("区县_terms");
        LinkedList<String> columnDimensionList = new LinkedList<>();
        columnDimensionList.add("性别_terms");
        return convertList(resultList,rowDimensionList,columnDimensionList);
    }
    /**
     * 递归解析 json
     * @param resultList
@ -129,10 +133,10 @@ public class AggregationBuildHandler {
        System.out.println("aggKey=" + aggKey);
        while (gradeBucket.hasNext()) {
            Terms.Bucket b = gradeBucket.next();
            String subVal = StringUtils.isEmpty(aggKey) ? b.getKey().toString() : (aggKey + "-" + b.getKey());
            String subVal = StringUtils.isEmpty(aggKey) ? b.getKey().toString() : (aggKey + ":" + b.getKey());
            for(Aggregation aggregation : b.getAggregations().asList()){
//                System.out.println("bucketNmae = " + b.getKey().toString() + "; aggName=" + aggregation.getName());
                subVal += ":"+ aggregation.getName();
                System.out.println("bucketNmae = " + b.getKey().toString() + "; aggName=" + aggregation.getName());
                subVal += ";"+ aggregation.getName();
                if (aggregation instanceof InternalValueCount) {
                    Map<String, Object> countMap = new HashMap<>();
                    InternalValueCount valueCount = (InternalValueCount) aggregation;
@ -198,8 +202,54 @@ public class AggregationBuildHandler {
            Terms terms = (Terms)aggregation;
            String termName = terms.getName();
            System.out.println("termName:" + termName);
            expainAggregationResult(resultList, terms.getBuckets().iterator(), "");
            expainAggregationResult(resultList, terms.getBuckets().iterator(), termName);
        }
    }
    /**
     * 行列数据转换
     * @param dataList
     * @param rowDimensionList
     * @param columnDimensionList
     * @return
     */
    public List<Map<String, Object>> convertList(List<Map<String, Object>> dataList,LinkedList<String> rowDimensionList ,LinkedList<String> columnDimensionList){
        List<Map<String,Object>> dataMapList = new ArrayList<>();
        List<String> rowList = new ArrayList<>();
        for(String rowDimen : rowDimensionList){
            for(Map<String, Object> map : dataList) {
                for (String key : map.keySet()) {
                    List<String> result = Arrays.asList(key.split(";"));//区县_terms:信州区 ;性别_terms ; 合计_count_result
                    for(String str : result){
                        if(str.contains(rowDimen)){
                            if(!rowList.contains(str)){
                                rowList.add(str);
                            }
                        }
                    }
                }
            }
            Map<String,Object> dataMap = new HashMap<>();
            for(String row : rowList){
                dataMap.put(row,row);
                for(String columnDimen : columnDimensionList){
                    for(Map<String, Object> map : dataList) {
                        for (String key : map.keySet()) {
                            if(key.contains(row) && key.contains(columnDimen)){
                                List<String> result = Arrays.asList(key.split(";"));
                                for(String str : result){
                                    dataMap.put(columnDimen,columnDimen);
                                }
                            }
                        }
                    }
                }
            }
            dataMapList.add(dataMap);
        }
        //未调试完成
        return  dataMapList;
    }