哎,編程路漫漫,一坑又一坑,爬完還會掉,何時是盡頭!
今朝有酒今朝醉,程序不對不敢睡!
還是接口昂,今天還是接口有問題,我是很菜,很笨,但是我還是要努力!!
正文:
接口需求是這樣的,根據車型查詢在線車輛數與總數.哼,挺簡單吧,我也覺得簡單,But,太菜了。
這塊查es,首先要獲取到客戶端
SearchRequestBuilder requestBuilder = transportClient.prepareSearch("索引名稱").setTypes("type名稱");
//這里是要用到一個聚合查詢 直接貼代碼了,我也還有些不懂的,先記錄下來再說
TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("vehicleTypeCount").field("vehicleType");
requestBuilder.addAggregation(termsBuilder);
SearchResponse response = requestBuilder.execute().actionGet();
//得到這個分組的集合
Terms terms = response.getAggregations().get("vehicleTypeCount");
String id = null;
Long count = 0l;
List<Object> list = new ArrayList<>();
HashMap<String, Object> map = new HashMap<>();
for (int i = 0; i < terms.getBuckets().size(); i++) {
//這里的id就是我們查的列名
id = terms.getBuckets().get(i).getKey().toString();
//count自然就是總量啦
count = terms.getBuckets().get(i).getDocCount();
//實際開發中,有時候寫代碼寫蒙了,定義這個map直接map.put(id,count)就完事了,但是實際上map中只會有一條數據,也就是一組kv,然后我是將它組成一個map時放入一個list
//其實我也不想這樣,感覺這樣也不太對,但有時候為了出任務,就不探究根部了,有看了帖子的大佬們如果可以,教我一下哈。(起始id和count每次都代替的是不同的值,但是就是只會有一條數據,難道是jvm只看到了表面字符id,count?)
map.put(id, count);
list.add(map);
}
這樣輸出的結果是:
"typeCount": { "1231": 1, "b": 1 }
其中123,b就是車型啦,后面的自然就是總數。