ElasticSearch執行多個字段Sum操作,但不進行分組Group操作

本文僅適合java、es都是小白的同志一起學習,大拿的就請直接路過吧。

之前一直使用NET開發項目,採用ElasticSearch+MongoDB模式進行數據存儲,索引。20年單位要求在Java平臺上開發,原有的系統,需要用java定製,開始摸着石頭過河,來寫Java操作Es、MongoDB。

運行環境單位部署的ES爲5.6.16

客戶端對應:

elasticsearch    5.6.16
elasticsearch-rest-high-level-client  5.6.16
elasticsearch-rest-client  5.6.16

記錄第一篇ES統計多個Sum函數,不進行分組(group by)。(對於小白來說,試驗了好久才整出來,主要還是Java語言應用不熟悉吧)

searchSourceBuilder.aggregation(hitagg).aggregation(revertagg); //注意這個 多個aggregation

直接上例子:

 /**
     * 統計點擊量、回覆量和sum值
     * @param ec es連接對象
     * @param mtj 統計條件
     * @return
     * @throws IOException
     */
    public static Map<String,Long> FacetHitAndRevertToSum(EsConnect ec, MainInfoJStj mtj) throws Exception {

        //定義返回對象
        Map<String,Long> reslut = new HashMap<String,Long>();

        //定義連接對象
        RestHighLevelClient client = RestHighLevelClientBuild.getHighLevelClient(ec.EsIpAddress,ec.EsPort);

        //換行檢索條件
        BoolQueryBuilder query = SearchMainInfo.combinationSearchMaininfo(mtj);

        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices(ec.EsIndex); //指定索引
        searchRequest.types(ec.EsType); //指定type
        searchRequest.searchType(SearchType.DEFAULT);

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.size(1);
        searchSourceBuilder.query(query);
        searchSourceBuilder.from(0);

        //類似:select sum(hit),sum(revert) from table

        //定義求和hit
        SumAggregationBuilder hitagg = AggregationBuilders.sum("by_hit").field("hit");

        //定義求和revert
        SumAggregationBuilder revertagg = AggregationBuilders.sum("by_revert").field("revert");

        //注意多個aggregation
        searchSourceBuilder.aggregation(hitagg).aggregation(revertagg);

        searchRequest.source(searchSourceBuilder);

        SearchResponse searchResponse = client.search(searchRequest);

        Sum by_hit = searchResponse.getAggregations().get("by_hit");
        Sum by_revert = searchResponse.getAggregations().get("by_revert");
        //點擊量和
        double hitsum = by_hit.getValue();
        //回覆量和
        double revertsum = by_revert.getValue();

        reslut.put("hit",(long)hitsum);
        reslut.put("revert",(long)revertsum);

        return reslut;

    }

 

發佈了70 篇原創文章 · 獲贊 7 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章