elasticsearch版本:6.1.1
数据字段:id aac003 yka055 id_drg name_drg id_mdc name_mdc id_depa
索引创建:
//todo 创建索引 private void createIndex(TransportClient client)throws Exception{ CreateIndexRequestBuilder cib=client.admin().indices().prepareCreate("hisms_sz"); // 设置该index的Mapping,可暂时不设置,后面建完index之后再设置也可 cib.addMapping("cz", createMapping()); // 设置该index的Settings配置,常用的有shard数量、副本数 cib.setSettings(createSetting()); cib.execute().get(); System.out.println("----------添加映射成功----------"); } /** * 创建索引--id aac003 yka055 id_drg name_drg id_mdc name_mdc id_depa */ private XContentBuilder createMapping() throws IOException { XContentBuilder mapping = XContentFactory.jsonBuilder() .startObject() .startObject("properties") //设置之定义字段 .startObject("aac003") .field("type","keyword") //设置数据类型 .endObject() .startObject("yka055") .field("type","double") .endObject() .startObject("name_drg") .field("type","keyword") .endObject() .startObject("id_mdc") .field("type","keyword") .endObject() .startObject("name_mdc") .field("type","keyword") .endObject() .startObject("id_drg") .field("type","text") .startObject("fields") .startObject("id_drg_key") .field("type","keyword") .endObject() .endObject() .endObject() .startObject("id_depa") .field("type","text") .startObject("fields") .startObject("id_depa_key") .field("type","keyword") .endObject() .endObject() .endObject() .startObject("date") .field("type","date") //设置Date类型 .field("format","yyyy-MM-dd HH:mm:ss")//设置Date的格式 .endObject() .endObject() .endObject(); return mapping; }
聚合查询:
private void getAggsResult(TransportClient client){ SearchResponse agg = client.prepareSearch("hisms_sz") .setTypes("cz") .addAggregation( AggregationBuilders.terms("id_mdc").field("id_mdc").size(26)//设置聚合条件 group by id_mdc,id_drg .subAggregation( AggregationBuilders.terms("name_drg").field("name_drg").size(700) .subAggregation(AggregationBuilders.avg("avg").field("yka055"))// 聚合结果 avg(date .subAggregation(AggregationBuilders.sum("sum").field("yka055")) .subAggregation(AggregationBuilders.min("min").field("yka055")) .subAggregation(AggregationBuilders.count("count").field("aac003")) .subAggregation(AggregationBuilders.cardinality("cardinality").field("aac003")) ) ) .execute().actionGet(); ArrayList
调用封装方法:
private ArrayList
封装后结果为List<Map>,同sql数据库中查询的一样,方便遍历查询,不用再循环遍历取出各桶的数据。