用java分組查elasticsearch


哎,編程路漫漫,一坑又一坑,爬完還會掉,何時是盡頭!

今朝有酒今朝醉,程序不對不敢睡!

還是接口昂,今天還是接口有問題,我是很菜,很笨,但是我還是要努力!!

正文:

接口需求是這樣的,根據車型查詢在線車輛數與總數.哼,挺簡單吧,我也覺得簡單,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就是車型啦,后面的自然就是總數。

 
         
         
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM