java 通過聚合查詢實(shí)現(xiàn)elasticsearch的group by后的數(shù)量
通過聚合查詢獲取group by 后的數(shù)量
/**
* 獲取key的個(gè)數(shù)
*
* @param key 要group by的字段名
* @param index 索引名稱
* @return id的個(gè)數(shù)
*/
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聚合查詢,相當(dāng)于groupby字段名
SearchResponse sr = search.addAggregation(AggregationBuilders.cardinality(key + "_count").field(key)).execute().actionGet();
//從返回?cái)?shù)據(jù)提取id總數(shù)
Cardinality result = sr.getAggregations().get(key + "_count");
long value = result.getValue();
count = (int) value;
} catch (InterruptedException e) {
} catch (Exception e) {
logger.error("getKeyCount錯(cuò)誤", e);
} finally {
connectionPool.releaseConnection(client);
}
return count;
}
獲取group by后的所有key值
/**
* 獲取所有key
*
* @param key 被group by的字段名
* @param index 索引名稱
* @return 所有id
*/
public static List<String> getAllKey(String key, String index) {
int keyCount = getKeyCount(key, index);
List<String> strings = new ArrayList<>();
TransportClient client = null;
try {
client = connectionPool.getConnection();
if (client == null) {
throw new Exception("沒有獲取到數(shù)據(jù)庫連接!");
}
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index);
//使用聚合,實(shí)現(xiàn)去重查詢
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();
//遍歷結(jié)果,提取出id
for (Terms.Bucket bucket : buckets) {
String keyAsString = bucket.getKeyAsString();
strings.add(keyAsString);
}
buckets.clear();
} catch (InterruptedException e) {
} catch (Exception e) {
logger.error("getAllKey錯(cuò)誤", e);
} finally {
connectionPool.releaseConnection(client);
}
return strings;
}
到此這篇關(guān)于Java通過聚合查詢獲取group by 后的數(shù)量的文章就介紹到這了,更多相關(guān)Java 聚合查詢獲取group by數(shù)量內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Maven項(xiàng)目本地公共common包緩存問題
這篇文章主要介紹了解決Maven項(xiàng)目本地公共common包緩存問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
詳解在Spring MVC或Spring Boot中使用Filter打印請(qǐng)求參數(shù)問題
這篇文章主要介紹了詳解在Spring MVC或Spring Boot中使用Filter打印請(qǐng)求參數(shù)問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
IDEA java出現(xiàn)無效的源發(fā)行版14解決方案
這篇文章主要介紹了IDEA java出現(xiàn)無效的源發(fā)行版14解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
SpringBoot項(xiàng)目在IntelliJ IDEA中如何實(shí)現(xiàn)熱部署
spring-boot-devtools是一個(gè)為開發(fā)者服務(wù)的一個(gè)模塊,其中最重要的功能就是自動(dòng)應(yīng)用代碼更改到最新的App上面去。,這篇文章主要介紹了SpringBoot項(xiàng)目在IntelliJ IDEA中如何實(shí)現(xiàn)熱部署,感興趣的小伙伴們可以參考一下2018-07-07
java實(shí)現(xiàn)簡單銀行管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單銀行管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
SpringBoot簡單實(shí)現(xiàn)定時(shí)器過程
這篇文章主要介紹了SpringBoot簡單實(shí)現(xiàn)定時(shí)器過程,對(duì)于Java后端來說肯定實(shí)現(xiàn)定時(shí)功能肯定是使用到Spring封裝好的定時(shí)調(diào)度Scheduled2023-04-04

