ElasticSearch6.x 基于SpringBoot 实现ElasticSearch的统计查询

秒速五厘米 2023-10-18 22:27 61阅读 0赞

AggregationUtil.java 实现elasticsearch 搜索引擎针对指定索引的max(最大值)、 min(最小值)、sum(合计统计)、avg(平均值统计)、 stats(基本统计)、extendedStats(高级统计)、cardinality(基数统计)、percentiles(百分比统计)、valueCount(文档数量统计)等相关统计功能。

  1. package com.zzg.ela.index.util;
  2. import org.elasticsearch.action.search.SearchResponse;
  3. import org.elasticsearch.client.transport.TransportClient;
  4. import org.elasticsearch.search.aggregations.AggregationBuilder;
  5. import org.elasticsearch.search.aggregations.AggregationBuilders;
  6. import org.elasticsearch.search.aggregations.metrics.avg.Avg;
  7. import org.elasticsearch.search.aggregations.metrics.cardinality.Cardinality;
  8. import org.elasticsearch.search.aggregations.metrics.max.Max;
  9. import org.elasticsearch.search.aggregations.metrics.min.Min;
  10. import org.elasticsearch.search.aggregations.metrics.percentiles.Percentiles;
  11. import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats;
  12. import org.elasticsearch.search.aggregations.metrics.sum.Sum;
  13. import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount;
  14. import org.elasticsearch.threadpool.ThreadPoolStats.Stats;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Component;
  17. /**
  18. * ela 工具类
  19. *
  20. * @author zzg
  21. *
  22. */
  23. @Component
  24. public class AggregationUtil {
  25. // 引入 Ela 连接实列化对象
  26. @Autowired
  27. private TransportClient client;
  28. /**
  29. * 最大值
  30. * @param index 索引
  31. * @param field 文档属性
  32. * @return
  33. */
  34. public double max(String index, String field){
  35. StringBuilder builder = new StringBuilder();
  36. builder.append("max_").append(field);
  37. String name = builder.toString();
  38. AggregationBuilder agg=AggregationBuilders.max(name).field(field);
  39. SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
  40. Max max=response.getAggregations().get(name);
  41. return max.getValue();
  42. }
  43. /**
  44. * 最小值统计
  45. * @param index 索引
  46. * @param field 文档属性
  47. * @return
  48. */
  49. public double min(String index, String field){
  50. StringBuilder builder = new StringBuilder();
  51. builder.append("min_").append(field);
  52. String name = builder.toString();
  53. AggregationBuilder agg=AggregationBuilders.min(name).field(field);
  54. SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
  55. Min min=response.getAggregations().get(name);
  56. return min.getValue();
  57. }
  58. /**
  59. * 合计统计
  60. * param index 索引
  61. * @param field 文档属性
  62. * @return
  63. */
  64. public double sum(String index, String field){
  65. StringBuilder builder = new StringBuilder();
  66. builder.append("sum_").append(field);
  67. String name = builder.toString();
  68. AggregationBuilder agg=AggregationBuilders.sum(name).field(field);
  69. SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
  70. Sum sum=response.getAggregations().get(name);
  71. return sum.getValue();
  72. }
  73. /**
  74. * 平均值统计
  75. * param index 索引
  76. * @param field 文档属性
  77. * @return
  78. */
  79. public double avg(String index, String field){
  80. StringBuilder builder = new StringBuilder();
  81. builder.append("avg_").append(field);
  82. String name = builder.toString();
  83. AggregationBuilder agg=AggregationBuilders.avg(name).field(field);
  84. SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
  85. Avg avg=response.getAggregations().get(name);
  86. return avg.getValue();
  87. }
  88. /**
  89. * 基本统计
  90. * @param index 索引
  91. * @param field 文档属性
  92. * @return
  93. */
  94. public Stats stats(String index, String field){
  95. StringBuilder builder = new StringBuilder();
  96. builder.append("stats_").append(field);
  97. String name = builder.toString();
  98. AggregationBuilder agg=AggregationBuilders.stats(name).field(field);
  99. SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
  100. return response.getAggregations().get(name);
  101. }
  102. /**
  103. * 高级统计
  104. * @param index 索引
  105. * @param field 文档属性
  106. * @return
  107. */
  108. public ExtendedStats extendedStats(String index, String field){
  109. StringBuilder builder = new StringBuilder();
  110. builder.append("extendedStats_").append(field);
  111. String name = builder.toString();
  112. AggregationBuilder agg=AggregationBuilders.extendedStats(name).field(field);
  113. SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
  114. return response.getAggregations().get(name);
  115. }
  116. /**
  117. * 基数统计
  118. * @param index 索引
  119. * @param field 文档属性
  120. * @return
  121. */
  122. public double cardinality(String index, String field){
  123. StringBuilder builder = new StringBuilder();
  124. builder.append("cardinality_").append(field);
  125. String name = builder.toString();
  126. AggregationBuilder agg=AggregationBuilders.cardinality(name).field(field);
  127. SearchResponse response=client.prepareSearch(index).addAggregation(agg).get();
  128. Cardinality c=response.getAggregations().get(name);
  129. return c.getValue();
  130. }
  131. /**
  132. * 百分位统计
  133. * @param index 索引
  134. * @param field 文档属性
  135. * @return
  136. */
  137. public Percentiles percentiles(String index, String field){
  138. StringBuilder builder = new StringBuilder();
  139. builder.append("percentiles_").append(field);
  140. String name = builder.toString();
  141. AggregationBuilder agg=AggregationBuilders.percentiles(name).field(field);
  142. SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
  143. return response.getAggregations().get(name);
  144. }
  145. /**
  146. * 文档数量统计
  147. * @param index 索引
  148. * @param field 文档属性
  149. * @return
  150. */
  151. public double valueCount(String index, String field){
  152. StringBuilder builder = new StringBuilder();
  153. builder.append("valueCount_").append(field);
  154. String name = builder.toString();
  155. AggregationBuilder agg=AggregationBuilders.count(name).field(field);
  156. SearchResponse response=client.prepareSearch(index).addAggregation(agg).execute().actionGet();
  157. ValueCount count=response.getAggregations().get(name);
  158. return count.getValue();
  159. }
  160. }

发表评论

表情:
评论列表 (有 0 条评论,61人围观)

还没有评论,来说两句吧...

相关阅读