国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

這篇具有很好參考價(jià)值的文章主要介紹了Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、實(shí)戰(zhàn)問(wèn)題

POST?test-002/_bulk
{"index":{"_id":1}}
{"name":?"張三","city":?"beijing"}
{"index":{"_id":2}}
{"name":?"李四","city":?"beijing"}
{"index":{"_id":3}}
{"name":?"王五","city":?"shanghai"}
{"index":{"_id":4}}
{"name":?"趙六","city":?"shanghai"}

請(qǐng)教老師, 上面的是我在es保存的數(shù)據(jù), 想寫一個(gè)dsl, 求出來(lái) beijing 占比 50%, shanghai 占比 50%。

死磕Elasticsearch知識(shí)星球 https://t.zsxq.com/0bqpcJiLL

2、問(wèn)題分析

類似問(wèn)題,樣例數(shù)據(jù)單看計(jì)算不復(fù)雜,“beijing” 2 個(gè),“上?!?2 個(gè),“beijing”占比: 2/(2+2) = 50%; "shanghai"同樣計(jì)算,占比 50%。

業(yè)務(wù)層面,建議獲取到分桶聚合結(jié)果后,直接代碼求解百分比效率更高。

僅就上面數(shù)據(jù)解釋如下,兩個(gè)步驟搞定。

  • 第一步:基于city 字段分桶聚合。

POST?test-002/_search
{
??"size":?0,
??"aggs":?{
????"city_aggs":?{
??????"terms":?{
????????"field":?"city",
????????"size":?10
??????}
????}
??}
}

獲取結(jié)果如下截圖所示。

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

第二步:業(yè)務(wù)代碼層面(python或Java或其他),直接來(lái)個(gè)除法搞定。

如上,才是效率最高的方案,尤其數(shù)據(jù)量巨大的業(yè)務(wù)場(chǎng)景。

問(wèn)題來(lái)了,我就想讓 Elasticsearch 搞定計(jì)算,怎么辦?

我們需要在剛才分桶聚合的基礎(chǔ)上,獲取桶內(nèi)“beijing”、“shanghai”的值,然后做除法。

這里的除法本質(zhì)會(huì)用到 Elasticsearch Pipeline 子聚合 bucket_script 的概念。

講到這里,有必要再把聚合梳理一遍。

3、聚合詳解

3.1 聚合全局認(rèn)知

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

聚合分類

核心分為三大類:

(1)Bucket 分桶聚合

通俗舉例:開(kāi)篇示例,按照“city”分桶,“beijing”一桶、“shanghai”一桶。

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

協(xié)議分桶聚合餅圖

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

時(shí)間走勢(shì)聚合示意圖

(2)Metrics 指標(biāo)聚合

通俗舉例:求一組數(shù)據(jù)中的最大值;求一組數(shù)的平均值。

(3)Pipeline子聚合(基于聚合的聚合)

通俗舉例:以B站視頻為例,首先按年度統(tǒng)計(jì)每年最大觀看量視頻,然后再統(tǒng)計(jì)觀看量最大視頻所在的年份(基于聚合再聚合)。

如果基礎(chǔ)概念還有點(diǎn)模糊,推薦閱讀:基于兒童積木玩具圖解 Elasticsearch 聚合。

3.2 Pipeline子聚合全局認(rèn)知

子聚合核心又可以分為兩類:

  • parent 子聚合

  • sibling 子聚合

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景? 子聚合分類

分類的依據(jù)更通俗講是語(yǔ)法規(guī)則的不同。

4、Pipeline子聚合詳解

為了更清楚的說(shuō)明兩者的不同,重構(gòu)了樣例數(shù)據(jù)如下。

####重構(gòu)后的樣例數(shù)據(jù)
DELETE?test-002
PUT?test-002
{
??"mappings":?{
????"properties":?{
??????"sale_data":?{
????????"type":?"date",
????????"format":?"yyyy-MM-dd"
??????},
??????"sale_count":?{
????????"type":?"long"
??????},
??????"name":?{
????????"type":?"keyword"
??????},
??????"city":?{
????????"type":?"keyword"
??????}
????}
??}
}

POST?test-002/_bulk
{"index":{"_id":1}}
{"name":"張三","city":"beijing","sale_date":"2023-01-08","sale_count":100}
{"index":{"_id":2}}
{"name":"李四","city":"beijing","sale_date":"2023-01-18","sale_count":5000}
{"index":{"_id":3}}
{"name":"王五","city":"shanghai","sale_date":"2022-11-08","sale_count":300}
{"index":{"_id":4}}
{"name":"趙六","city":"shanghai","sale_date":"2022-12-28","sale_count":1000}

4.1 sibling 子聚合舉例

  • 需求描述:按照月份統(tǒng)計(jì)每個(gè)月的總銷量,并獲取月總銷量最大的月份?

  • 需求拆解:

(1)按照月份統(tǒng)計(jì):使用 bucket 分桶聚合的date_histogram時(shí)間走勢(shì)直方圖聚合實(shí)現(xiàn)。?

(2)每個(gè)月的總銷量:在按照月份統(tǒng)計(jì)的基礎(chǔ)上進(jìn)行嵌套聚合,借助Metric指標(biāo)聚合的sum實(shí)現(xiàn)。?

(3)獲取月總銷量最大的月份:使用 Pipeline 子聚合的 Max_bucket 實(shí)現(xiàn)。

最終實(shí)現(xiàn):

POST?test-002/_search
{
??"size":?0,
??"aggs":?{
????"sales_per_month":?{
??????"date_histogram":?{
????????"field":?"sale_date",
????????"calendar_interval":?"month"
??????},
??????"aggs":?{
????????"sales":?{
??????????"sum":?{
????????????"field":?"sale_count"
??????????}
????????}
??????}
????},
????"max_monthly_sales":?{
??????"max_bucket":?{
????????"buckets_path":?"sales_per_month?>?sales"
??????}
????}
??}
}
Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

4.2 parent 子聚合舉例

  • 需求描述:文章開(kāi)頭,求“beijing”、“shanghai”的各占百分比 ?

  • 需求拆解:

(1)按照 city 分桶:獲取“beijing”、“shanghai”的 bucket 分桶聚合結(jié)果。

(2)計(jì)算百分比:借助 “bucket_script” 腳本子聚合實(shí)現(xiàn)。

這里實(shí)現(xiàn)層面不簡(jiǎn)單是上面的兩步就可以完成。

核心原因在于:bucket_script 是 “parent”類型的子聚合,進(jìn)一步說(shuō),它需要嵌套在外層聚合的里面,外層聚合就相當(dāng)于它的“parent”,新加的子聚合相當(dāng)于“child”。

外層怎么加,這個(gè)類似咱們之前的實(shí)現(xiàn):圖解:Elasticsearch 8.X 如何求解環(huán)比上升比例?

需要借助 filters 過(guò)濾聚合整出一個(gè)全量數(shù)據(jù)集,然后在此基礎(chǔ)上統(tǒng)計(jì)分桶、桶內(nèi)數(shù)據(jù)量,并借助 bucket_script 實(shí)現(xiàn)百分比。

具體實(shí)現(xiàn)如下:

POST?test-002/_search
{
??"size":?0,
??"aggs":?{
????"all_datas":?{
??????"filters":?{
????????"filters":?{
??????????"all_dates_no_process":?{
????????????"match_all":?{}
??????????}
????????}
??????},
??????"aggs":?{
????????"bucket_by_city":?{
??????????"terms":?{
????????????"field":?"city",
????????????"size":?10
??????????}
????????},
????????"counts_of_city":?{
??????????"value_count":?{
????????????"field":?"city"
??????????}
????????},
????????"bj_percents":?{
??????????"bucket_script":?{
????????????"buckets_path":?{
??????????????"bj_count":?"bucket_by_city['beijing']>_count",
??????????????"all_counts":?"counts_of_city"
????????????},
????????????"script":?"params.bj_count?/?params.all_counts"
??????????}
????????},
????????"sh_percents":?{
??????????"bucket_script":?{
????????????"buckets_path":?{
??????????????"sh_count":?"bucket_by_city['shanghai']>_count",
??????????????"all_counts":?"counts_of_city"
????????????},
????????????"script":?"params.sh_count?/?params.all_counts"
??????????}
????????}
??????}
????}
??}
}

不常用參數(shù):bucket_by_city['beijing']>_count 含義如下:

獲取“beijing”桶下的count計(jì)數(shù)結(jié)果。

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

折疊圖如下圖所示,parent 類別的含義由此而來(lái)。

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

最終百分比結(jié)果如下:

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

至此,開(kāi)篇問(wèn)題求解完畢。

5、bucket_script、bucket_selector、bucket_sort 的定義和應(yīng)用場(chǎng)景?

  • Bucket selector選擇子聚合:對(duì)聚合的結(jié)果執(zhí)行進(jìn)一步的篩選和運(yùn)算。

  • Bucket script 腳本子聚合:在聚合的結(jié)果上執(zhí)行腳本運(yùn)算,以生成新的聚合結(jié)果。

  • Bucket sort 排序子聚合:用聚合結(jié)果的任意字段進(jìn)行排序,并返回一個(gè)排序后的桶列表。

這三類都屬于 parent 類型的子聚合。子聚合的核心是對(duì)前置聚合結(jié)果的二次聚合,所以,只有業(yè)務(wù)需求有對(duì)聚合結(jié)果再聚合的場(chǎng)景才考慮子聚合。

bucket_script?是一種特殊的子聚合功能,它允許我們?cè)诰酆系耐爸袌?zhí)行腳本。

應(yīng)用舉例:可以使用腳本來(lái)計(jì)算每個(gè)桶的平均值、百分比(如本文示例)、環(huán)比及標(biāo)準(zhǔn)差等。

bucket_selector?是一種特殊的子聚合功能,它允許我們選擇某些桶并對(duì)其進(jìn)行子聚合。

應(yīng)用舉例:可以使用選擇器選擇某些桶并統(tǒng)計(jì)它們的總和。

bucket_sort 是一種排序功能,它允許我們按指定順序?qū)ν斑M(jìn)行排序。

應(yīng)用舉例:可以按照每個(gè)桶的計(jì)數(shù)進(jìn)行排序,以便查看最頻繁的項(xiàng)目。

在實(shí)際應(yīng)用場(chǎng)景中,可以根據(jù)需要選擇使用上述功能中的一個(gè)或多個(gè)。

應(yīng)用舉例:可以對(duì)某個(gè)字段的值進(jìn)行分組,然后使用 bucket_sort 對(duì)分組后的桶進(jìn)行排序,并使用bucket_script在桶中執(zhí)行腳本,最后使用bucket_selector選擇某些桶并對(duì)其進(jìn)行聚合。

這樣,我們可以對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行多層次的分析和統(tǒng)計(jì)功能。

6、小結(jié)

由百分比的問(wèn)題引申出聚合分類,由聚合分類引申出Pipeline 子聚合的兩個(gè)子類型:parent、sibling(兄弟)的區(qū)別,更進(jìn)一步引申出bucket_script、bucket_selector、bucket_sort的定義和應(yīng)用場(chǎng)景。為后續(xù)類似問(wèn)題提供參考。

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

推薦視頻解讀:

參考

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html

推薦閱讀

  1. 全網(wǎng)首發(fā)!從 0 到 1 Elasticsearch 8.X 通關(guān)視頻

  2. 重磅 | 死磕 Elasticsearch 8.X 方法論認(rèn)知清單(2022年國(guó)慶更新版)

  3. 如何系統(tǒng)的學(xué)習(xí) Elasticsearch ?

  4. 2023,做點(diǎn)事

  5. 圖解:Elasticsearch 8.X 如何求解環(huán)比上升比例?

更短時(shí)間更快習(xí)得更多干貨!

和全球?1800+?Elastic 愛(ài)好者一起精進(jìn)!

Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?

比同事?lián)屜纫徊綄W(xué)習(xí)進(jìn)階干貨!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-407945.html

到了這里,關(guān)于Elasticsearch bucket_script、bucket_selector、bucket_sort 區(qū)別和應(yīng)用場(chǎng)景?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ElasticSearch_dsl實(shí)現(xiàn)多字段查詢?nèi)ブ剡^(guò)濾詳解(script)

    ElasticSearch_dsl實(shí)現(xiàn)多字段查詢?nèi)ブ剡^(guò)濾詳解(script)

    ElasticSearch單字段去重詳見(jiàn)博文:ElasticSearch單字段查詢?nèi)ブ卦斀鈅IT之一小佬的博客-CSDN博客 ElasticSearch多字段去重詳見(jiàn)博文:ElasticSearch多字段查詢?nèi)ブ剡^(guò)濾詳解_IT之一小佬的博客-CSDN博客 本博文將詳細(xì)介紹使用elasticsearch_dsl進(jìn)行多字段進(jìn)行去重。本文示例數(shù)據(jù)詳見(jiàn)上文單字段博

    2023年04月22日
    瀏覽(20)
  • ElasticSearch script查詢報(bào)錯(cuò)Variable [field] is not defined

    ES版本7.6.0 想篩選某兩個(gè)字段之和大于10的文檔,需要用到腳本,簡(jiǎn)化的請(qǐng)求如下 報(bào)錯(cuò)提示field未定義,報(bào)錯(cuò)詳情 解決方法:改用雙引號(hào)包裹包裹字段名

    2024年02月07日
    瀏覽(15)
  • 使用 Elasticsearch 作為向量數(shù)據(jù)庫(kù):深入研究 dense_vector 和 script_score

    使用 Elasticsearch 作為向量數(shù)據(jù)庫(kù):深入研究 dense_vector 和 script_score

    Elasticsearch 是一個(gè)非常強(qiáng)大且靈活的搜索和分析引擎。 雖然其主要用例圍繞全文搜索,但它的用途廣泛,足以用于各種其他功能。 其中一項(xiàng)引起許多開(kāi)發(fā)人員和數(shù)據(jù)科學(xué)家關(guān)注的功能是使用 Elasticsearch 作為向量數(shù)據(jù)庫(kù)。 隨著 dense_vector 數(shù)據(jù)類型的出現(xiàn)以及利用 script_score 函數(shù)

    2024年02月07日
    瀏覽(26)
  • 安裝 elasticsearch-head 環(huán)境時(shí)報(bào)錯(cuò):Failed at the phantomjs-prebuilt@2.1.16 install script.

    安裝 elasticsearch-head 環(huán)境時(shí)報(bào)錯(cuò):Failed at the phantomjs-prebuilt@2.1.16 install script.

    執(zhí)行 npm install 報(bào)錯(cuò): –ignore-scripts參數(shù)用于npm install在安裝插件時(shí)忽略package.json中設(shè)置的腳本,意思就是避免package.json中的腳本影響插件的正常安裝 安裝成功!? 此時(shí)顯示elasticsearch未連接,需要修改一下elasticsearch的配置并重新啟動(dòng) 修改elasticsearch.yml文件,新增如下配置:

    2024年02月13日
    瀏覽(35)
  • MongoDB聚合:$bucket

    $bucket 將輸入文檔按照指定的表達(dá)式和邊界進(jìn)行分組,每個(gè)分組為一個(gè)文檔,稱為“桶”,每個(gè)桶都有一個(gè)唯一的 _id ,其值為文件桶的下線。每個(gè)桶中至少要包含一個(gè)輸入文檔,也就是沒(méi)有空桶。 語(yǔ)法 groupBy 對(duì)文檔進(jìn)行分組的表達(dá)式。若指定字段路徑,需要在字段名前加上

    2024年01月23日
    瀏覽(16)
  • 【算法】桶排序(Bucket Sort)詳解

    【算法】桶排序(Bucket Sort)詳解

    桶排序(Bucket Sort)又稱箱排序,是一種比較常用的排序算法。其算法原理是將數(shù)組分到有限數(shù)量的桶里,再對(duì)每個(gè)桶分別排好序(可以是遞歸使用桶排序,也可以是使用其他排序算法將每個(gè)桶分別排好序),最后一次將每個(gè)桶中排好序的數(shù)輸出。 桶排序的思想就是把待排序

    2024年01月24日
    瀏覽(25)
  • hudi的bucket.index相關(guān)配置

    hudi的bucket.index相關(guān)配置的源碼文件為 HoodieIndexConfig.java 。 通用配置 配置項(xiàng)名 默認(rèn)值 說(shuō)明 引入版本 hoodie.index.type 默認(rèn)值和引擎有關(guān),F(xiàn)link上默認(rèn)值為FLINK_STATE,Spark上默認(rèn)值為SIMPLE,Java應(yīng)用的默認(rèn)值為INMEMORY 索引類型,可取值:HBASE、INMEMORY、BLOOM、GLOBAL_BLOOM、SIMPLE、GLOBAL_

    2024年02月03日
    瀏覽(17)
  • 4EVER-Bucket 優(yōu)于市場(chǎng)的優(yōu)勢(shì)

    分散存儲(chǔ) 用戶可以將數(shù)據(jù)存儲(chǔ)在去中心化存儲(chǔ)系統(tǒng)中,而無(wú)需考慮數(shù)據(jù)的中央孤島。此外,與集中式存儲(chǔ)解決方案相比,分散化有助于提高隱私和安全性。此外,它利用運(yùn)營(yíng)商和用戶的對(duì)等網(wǎng)絡(luò)來(lái)管理數(shù)據(jù)。 因此,它有助于在存儲(chǔ)和傳輸過(guò)程中確保數(shù)據(jù)安全。它還使用了基

    2024年02月02日
    瀏覽(20)
  • AWS S3 bucket 的 ACL 控制

    AWS S3 bucket 的 ACL 控制

    在新的 AWS S3 控制中,啟用了一個(gè)默認(rèn)的配置。 這個(gè)默認(rèn)的配置能夠阻止用戶的訪問(wèn)。 首先需要對(duì) Object 所有者進(jìn)行修改。 在打開(kāi)的界面中,選擇 ACLs 啟用。 然后選擇選項(xiàng)。 ? 然后單擊保存。 隨后,就可以對(duì) ACL 進(jìn)行編輯了。 通??梢酝ㄟ^(guò)這個(gè)配置來(lái)完成對(duì)參考的默認(rèn)訪問(wèn)

    2024年02月13日
    瀏覽(20)
  • 解決:Some selectors are not allowed in component wxss, including tag name selectors, ID selectors

    在微信開(kāi)發(fā)工具中運(yùn)行文檔中的代碼,出現(xiàn)如下錯(cuò)誤: ?[渲染層錯(cuò)誤] Some selectors are not allowed in component wxss, including tag name selectors, ID selectors, and attribute selectors.(./custom-tab-bar/index.wxss:36:15)(env: Windows,mp,1.06.2210310; lib: 2.5.0) 出現(xiàn)原因:隨著小程序的發(fā)展,文檔中原來(lái)的寫法已經(jīng)不

    2024年02月12日
    瀏覽(15)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包