elasticsearch bucket 之rare terms聚合使用詳解
1、背景
我們知道當(dāng)我們使用 terms聚合時(shí),當(dāng)修改默認(rèn)順序?yàn)?code>_count asc時(shí),統(tǒng)計(jì)的結(jié)果是不準(zhǔn)備的,而且官方也不推薦我們這樣做,而是推薦使用rare terms聚合。rare terms是一個(gè)稀少的term聚合,可以一定程度的解決升序問題。
2、需求
統(tǒng)計(jì)province字段中包含上和湖的term數(shù)據(jù),并且最多只能出現(xiàn)2次。獲取到聚合后的結(jié)果。
3、前置準(zhǔn)備
3.1 準(zhǔn)備mapping
PUT /index_person
{
"settings": {
"number_of_shards": 1
},
"mappings": {
"properties": {
"id": {
"type": "long"
},
"name": {
"type": "keyword"
},
"province": {
"type": "keyword"
},
"sex": {
"type": "keyword"
},
"age": {
"type": "integer"
},
"pipeline_province_sex":{
"type": "keyword"
},
"address": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
3.2 準(zhǔn)備數(shù)據(jù)
PUT /_bulk
{"create":{"_index":"index_person","_id":1}}
{"id":1,"name":"張三","sex":"男","age":20,"province":"湖北","address":"湖北省黃岡市羅田縣匡河鎮(zhèn)"}
{"create":{"_index":"index_person","_id":2}}
{"id":2,"name":"李四","sex":"男","age":19,"province":"江蘇","address":"江蘇省南京市"}
{"create":{"_index":"index_person","_id":3}}
{"id":3,"name":"王武","sex":"女","age":25,"province":"湖北","address":"湖北省武漢市江漢區(qū)"}
{"create":{"_index":"index_person","_id":4}}
{"id":4,"name":"趙六","sex":"女","age":30,"province":"北京","address":"北京市東城區(qū)"}
{"create":{"_index":"index_person","_id":5}}
{"id":5,"name":"錢七","sex":"女","age":16,"province":"北京","address":"北京市西城區(qū)"}
{"create":{"_index":"index_person","_id":6}}
{"id":6,"name":"王八","sex":"女","age":45,"province":"北京","address":"北京市朝陽區(qū)"}
{"create":{"_index":"index_person","_id":7}}
{"id":7,"name":"九哥","sex":"男","age":25,"province":"上海市","address":"上海市嘉定區(qū)"}
4、實(shí)現(xiàn)需求
4.1 dsl
GET /index_person/_search
{
"size": 0,
"aggs": {
"agg_province": {
"rare_terms": {
"field": "province",
"max_doc_count": 2,
"precision": 0.01,
"include": "(.*上.*|.*湖.*|.*江.*)",
"exclude": ["江蘇"],
"missing": "default省"
}
}
}
}
4.2 java代碼
@Test
@DisplayName("稀少的term聚合,類似按照 _count asc 排序的terms聚合,但是terms聚合中按照_count asc的結(jié)果是不準(zhǔn)的,需要使用 rare terms 聚合")
public void agg01() throws IOException {
SearchRequest searchRequest = new SearchRequest.Builder()
.size(0)
.index("index_person")
.aggregations("agg_province", agg ->
agg.rareTerms(rare ->
// 稀有詞 的字段
rare.field("province")
// 該稀有詞最多可以出現(xiàn)在幾個(gè)文檔中,最大值為100,如果要調(diào)整,需要修改search.max_buckets參數(shù)的值(嘗試修改這個(gè)值,不生效)
// 在該例子中,只要是出現(xiàn)的次數(shù)<=2的聚合都會(huì)返回
.maxDocCount(2L)
// 內(nèi)部布谷鳥過濾器的精度,精度越小越準(zhǔn),但是相應(yīng)的消耗內(nèi)存也越多,最小值為 0.00001,默認(rèn)值為 0.01
.precision(0.01)
// 應(yīng)該包含在聚合的term, 當(dāng)是單個(gè)字段是,可以寫正則表達(dá)式
.include(include -> include.regexp("(.*上.*|.*湖.*|.*江.*)"))
// 排出在聚合中的term,當(dāng)是集合時(shí),需要寫準(zhǔn)確的值
.exclude(exclude -> exclude.terms(Collections.singletonList("江蘇")))
// 當(dāng)文檔中缺失province字段時(shí),給默認(rèn)值
.missing("default省")
)
)
.build();
System.out.println(searchRequest);
SearchResponse<Object> response = client.search(searchRequest, Object.class);
System.out.println(response);
}
一些注意事項(xiàng)都在注釋中。
4.3 運(yùn)行結(jié)果

5、max_doc_count 和 search.max_buckets

6、注意事項(xiàng)
rare terms統(tǒng)計(jì)返回的數(shù)據(jù)沒有大小限制,而且受max_doc_count參數(shù)的限制,比如:如果復(fù)合 max_doc_count 的分組有60個(gè),那么這60個(gè)分組會(huì)直接返回。max_doc_count的值最大為100,貌似不能修改。- 如果一臺(tái)節(jié)點(diǎn)聚合收集的結(jié)果過多,那么很容易超過
search.max_buckets的值,此時(shí)就需要修改這個(gè)值。
# 臨時(shí)修改
PUT /_cluster/settings
{"transient": {"search.max_buckets": 65536}}
# 永久修改
PUT /_cluster/settings
{"persistent": {"search.max_buckets": 65536}}
完整代碼
參考文檔
以上就是elasticsearch bucket 之rare terms聚合使用詳解的詳細(xì)內(nèi)容,更多關(guān)于elasticsearch bucket rare terms的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
spring 整合 mybatis 中數(shù)據(jù)源的幾種配置方式(總結(jié)篇)
因?yàn)閟pring 整合mybatis的過程中, 有好幾種整合方式,尤其是數(shù)據(jù)源那塊,經(jīng)??吹讲灰粯拥呐渲梅绞剑偢杏X有點(diǎn)亂,所以今天有空總結(jié)下,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05
Spring Cloud Feign統(tǒng)一設(shè)置驗(yàn)證token實(shí)現(xiàn)方法解析
這篇文章主要介紹了Spring Cloud Feign統(tǒng)一設(shè)置驗(yàn)證token實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Spring Boot創(chuàng)建非可執(zhí)行jar包的實(shí)例教程
這篇文章主要介紹了Spring Boot創(chuàng)建非可執(zhí)行jar包的實(shí)例教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02
Springboot+Flowable?快速實(shí)現(xiàn)工作流的開發(fā)流程
這篇文章主要介紹了Springboot+Flowable?快速實(shí)現(xiàn)工作流的開發(fā)流程,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
SpringCloud?Alibaba環(huán)境集成之nacos詳解
Spring?Cloud?Alibaba提供了越來越完善的各類微服務(wù)治理組件,比如分布式服務(wù)配置與注冊(cè)中心nacos,服務(wù)限流、熔斷組件sentinel等,本篇先來介紹SpringCloud?Alibaba環(huán)境集成之nacos詳解,需要的朋友可以參考下2023-03-03
詳解在java中進(jìn)行日期時(shí)間比較的4種方法
這篇文章主要介紹了詳解在java中進(jìn)行日期時(shí)間比較的4種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java實(shí)現(xiàn)無損Word轉(zhuǎn)PDF的示例代碼
本文將利用Java中的兩個(gè)jar包:pdfbox和aspose-words實(shí)現(xiàn)無損Word轉(zhuǎn)PDF功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-06-06

