業務:查詢熱點詞匯
實現:使用聚合函數,統計前100條高頻詞匯
解決聚合只顯示10條問題:
在構建termsBuilder聚合查詢對構建器時,在最后設置size值為100,完美解決
public ESReturn searchHotPoint(Integer day, Integer num) { ESReturn esReturn = new ESReturn(); List<BucketsReturnVO> bucketsReturnVOList = new ArrayList<>(); Client client = clientHelper.getClient(); //分組聚合 AggregationBuilder termsBuilder = AggregationBuilders.terms("by_searchKeyword").field("searchKeyword").size(100); AggregationBuilder countBuilder = AggregationBuilders.count("searchKeywordCount").field("searchKeyword"); termsBuilder.subAggregation(countBuilder); SearchRequestBuilder sb = client.prepareSearch("search_history").setTypes("user_search_history"); SearchResponse sr = sb.setQuery(QueryESUtil.getQueryBuildByDay(day)) .addAggregation(termsBuilder) .get(); SearchHits hits = sr.getHits(); SearchHit[] lists = hits.getHits(); logger.info("總命中數:" + hits.totalHits); logger.info("總長度:" + lists.length); Aggregation bySearchKeyword = sr.getAggregations().asMap().get("by_searchKeyword"); //轉成BySearchKeywordVO對象 BySearchKeywordVO keywordVO = GsonUtil.GsonToBean(bySearchKeyword.toString(), BySearchKeywordVO.class); List<Buckets> buckets = keywordVO.getBy_searchKeyword().getBuckets(); //整理返回數據 for (Buckets bucket : buckets) { BucketsReturnVO bucketsReturnVO = new BucketsReturnVO(); bucketsReturnVO.setKeyword(bucket.getKey()); bucketsReturnVO.setDocCount(bucket.getDoc_count()); bucketsReturnVOList.add(bucketsReturnVO); } esReturn.setTotal(hits.totalHits); esReturn.setData(bucketsReturnVOList); return esReturn; }