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聚合,可以一定程度的解決升序問(wèn)題。
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":"錢(qián)七","sex":"女","age":16,"province":"北京","address":"北京市西城區(qū)"} {"create":{"_index":"index_person","_id":6}} {"id":6,"name":"王八","sex":"女","age":45,"province":"北京","address":"北京市朝陽(yáng)區(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)部布谷鳥(niǎo)過(guò)濾器的精度,精度越小越準(zhǔn),但是相應(yīng)的消耗內(nèi)存也越多,最小值為 0.00001,默認(rèn)值為 0.01 .precision(0.01) // 應(yīng)該包含在聚合的term, 當(dāng)是單個(gè)字段是,可以寫(xiě)正則表達(dá)式 .include(include -> include.regexp("(.*上.*|.*湖.*|.*江.*)")) // 排出在聚合中的term,當(dāng)是集合時(shí),需要寫(xiě)準(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ù)沒(méi)有大小
限制,而且受max_doc_count
參數(shù)的限制,比如:如果復(fù)合 max_doc_count 的分組有60個(gè),那么這60個(gè)分組會(huì)直接返回。max_doc_count
的值最大為100
,貌似不能修改。- 如果一臺(tái)節(jié)點(diǎn)聚合收集的結(jié)果過(guò)多,那么很容易超過(guò)
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)文章
SpringBoot整合Solr實(shí)現(xiàn)文檔檢索
Solr高度可靠、可擴(kuò)展和容錯(cuò),提供分布式索引、復(fù)制和負(fù)載平衡查詢、自動(dòng)故障轉(zhuǎn)移和恢復(fù)、集中配置等,Solr 為世界上許多最大的 Internet 站點(diǎn)的搜索和導(dǎo)航功能提供支持,本文將給大家介紹SpringBoot整合Solr實(shí)現(xiàn)文檔檢索,需要的朋友可以參考下2023-08-08MyBatis-Plus中SimpleQuery查詢實(shí)現(xiàn)
本文主要介紹了MyBatis-Plus中SimpleQuery查詢實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08SpringBoot如何讀取war包jar包和Resource資源
這篇文章主要介紹了SpringBoot如何讀取war包jar包和Resource資源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Spring?Boot?整合RocketMq實(shí)現(xiàn)消息過(guò)濾功能
這篇文章主要介紹了Spring?Boot?整合RocketMq實(shí)現(xiàn)消息過(guò)濾,本文講解了RocketMQ實(shí)現(xiàn)消息過(guò)濾,針對(duì)不同的業(yè)務(wù)場(chǎng)景選擇合適的方案即可,需要的朋友可以參考下2022-06-06@Scheduled定時(shí)器原理及@RefreshScope相互影響
這篇文章主要為大家介紹了@Scheduled定時(shí)器原理及@RefreshScope相互影響詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07java實(shí)現(xiàn)基于SGIP協(xié)議開(kāi)發(fā)聯(lián)通短信的方法
這篇文章主要介紹了java實(shí)現(xiàn)基于SGIP協(xié)議開(kāi)發(fā)聯(lián)通短信的方法,涉及java短信發(fā)送的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07一文讀懂a(chǎn)va中的Volatile關(guān)鍵字使用
volatile關(guān)鍵字的作用保證了變量的可見(jiàn)性(visibility)。被volatile關(guān)鍵字修飾的變量,如果值發(fā)生了變更,其他線程立馬可見(jiàn),避免出現(xiàn)臟讀的現(xiàn)象。這篇文章主要介紹了ava中的Volatile關(guān)鍵字使用,需要的朋友可以參考下2020-03-03Java實(shí)現(xiàn)三子棋小游戲簡(jiǎn)易版
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)三子棋小游戲簡(jiǎn)易版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05