java 通过聚合查询实现elasticsearch的group by后的数量

网友投稿 345 2022-11-11

java 通过聚合查询实现elasticsearch的group by后的数量

通过聚合查询获取group by 后的数量

/**

* 获取key的个数

*

* @param key 要group by的字段名

* @param index 索引名称

* @return id的个数

*/

public static int getKeyCount(String key, String index) {

int count = 0;

TransportClient client = null;

try {

client = connectionPool.getConnection();

if (client == null) {

throw new Exception("没有获取到连接!");

}

SearchRequestBuilder search = client.prepareSearch(index);

//cardinality聚合查询,相当于groupby字段名

SearchResponse sr = search.addAggregation(AggregationBuilders.cardinality(key + "_count").field(key)).execute().actionGet();

//从返回数据提取id总数

Cardinality result = sr.getAggregations().get(key + "_count");

long value = result.getValue();

count = (int) value;

} catch (InterruptedException e) {

} catch (Exception e) {

logger.error("getKeyCount错误", e);

} finally {

connectionPool.releaseConnection(client);

}

return count;

}

获取group by后的所有key值

/**

* 获取所有key

*

* @param key 被group by的字段名

* @param index 索引名称

* @return 所有id

*/

public static List getAllKey(String key, String index) {

int keyCount = getKeyCount(key, index);

List strings = new ArrayList<>();

TransportClient client = null;

try {

client = connectionPool.getConnection();

if (client == null) {

throw new Exception("没有获取到数据库连接fraGvu!");

}

SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index);

//使用聚合,实现去重查询

SearchResponse searchResponse = searchRequestBuilder.

addAggregation(AggregationBuilders.terms("models").field(key).size(keyCount)).execute().actionGet();

Terms term = searchResponse.getAggregations().get("models");

List extends Terms.Bucket> buckets = term.getBuckets();

//遍历结果,提取出id

for (Terms.Bucket bucket : buckets) {

String keyAsString = bucket.getKeyAsString();

strings.add(keyAsString);

}

buckets.clear();

} catch (InterruptedException e) {

} catch (Exception e) {

logger.error("getAllKey错误", e);

} finally {

connectionPool.releaseConnection(client);

}

return strings;

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:从Google Quick Draw涂鸦观察不同文化属性
下一篇:keepalived+haproxy高可用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~