數據的聚合

  1. 聚合可以實現對文檔數據的統計,分析,運算,聚合常見有三類(聚合的值一定不能是text類型的):

    桶(Bucket)聚合:用來對文檔做分組。

    度量(Metric)聚合:用以計算一些值,比方說最大值,最小值,平均值等。

    管道(pipeline)聚合:其它聚合的結果為基礎進行聚合。

    參與聚合的字段類型:keyword,數值,日期,布爾。

  1. DSL實現Bucket聚合

    lasticsearch 的 Bucket 聚合(桶聚合)是將文檔分組到 "桶" 中的強大工具,類似于 SQL 中的GROUP BY。每個桶關聯一個條件,符合條件的文檔會被分到對應的桶中。

    Terms聚合

    • 場景:統計博客文章中每個標簽的文檔數量。

    • GET /blog/_search
      {"size": 0, ?// 不返回原始文檔,只返回聚合結果"aggs": {"tags": {"terms": {"field": "tags.keyword", ?// 使用keyword類型避免分詞"size": 10, ?// 返回前10個最常見的標簽"order": {"_count": "desc" ?// 按文檔數量降序排序}}}}
      }
      結果示例
      {"aggregations": {"tags": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 15,"buckets": [{"key": "elasticsearch","doc_count": 25},{"key": "java","doc_count": 18}]}}
      }
      //大多數 Bucket 聚合默認按文檔數量(_count)降序排序。
      //按文檔數量排序DSL演示
      GET /products/_search
      {"size": 0,"aggs": {"by_category": {"terms": {"field": "category.keyword","order": {"_count": "desc" ?// 按文檔數量降序(默認)}}}}
      }
      //結果演示
      {"aggregations": {"by_category": {"buckets": [{ "key": "electronics", "doc_count": 120 },{ "key": "clothing", "doc_count": 80 },{ "key": "books", "doc_count": 50 }]}}
      }
      //場景:只對價格大于 100 的商品進行類別聚合
      //DSL示例
      GET /products/_search
      {"query": {"range": {"price": {"gt": 100}}},"size": 0,"aggs": {"by_category": {"terms": {"field": "category.keyword"}}}
      }
      //結果顯示
      {"aggregations": {"by_category": {"buckets": [{"key": "electronics","doc_count": 100,"expensive_products": {"doc_count": 75, ?// 價格>100的電子產品數量"count": {"value": 75}}}]}}
      }
       
    • aggs代表聚合,與query同級,此時query的作用是限定聚合的的文檔范圍

    • 聚合必須的三要素

      • 聚合名稱

      • 聚合類型

      • 聚合字段

    • 聚合可配置的屬性有:size:指定聚合結果數量,order指定聚合結果排序方式,field指定聚合字段。

  2. DSL實現Metric聚合

    計算所有產品的平均價格

    GET /products/_search
    {"size": 0, ?// 不返回原始文檔"aggs": {"avg_price": {"avg": {"field": "price"}}}
    }
    //結果顯示
    {"aggregations": {"avg_price": {"value": 125.5 ?// 平均價格}}
    }

    嵌套聚合metric聚合的組合使用

    //按類別分組,計算每個類別的平均價格、最高價格和最低價格。
    GET /products/_search
    {"size": 0,"aggs": {"by_category": {"terms": {"field": "category.keyword"},"aggs": {"avg_price": { "avg": { "field": "price" } },"max_price": { "max": { "field": "price" } },"min_price": { "min": { "field": "price" } },"price_stats": { "stats": { "field": "price" } }}}}
    }

    在java中進行聚合

    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.aggregations.AggregationBuilders;
    import org.elasticsearch.search.aggregations.bucket.filter.Filter;
    import org.elasticsearch.search.aggregations.bucket.terms.Terms;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    ?
    import java.io.IOException;
    ?
    public class FilterAggregationExample {private final RestHighLevelClient client;public FilterAggregationExample(RestHighLevelClient client) {this.client = client;}public void filterAggregation() throws IOException {SearchRequest searchRequest = new SearchRequest("products");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// 構建按類別分組的聚合,在每個類別中過濾價格>100的商品searchSourceBuilder.aggregation(AggregationBuilders.terms("by_category").field("category.keyword").subAggregation(AggregationBuilders.filter("expensive_products",QueryBuilders.rangeQuery("price").gt(100)).subAggregation(AggregationBuilders.valueCount("count").field("id"))));searchRequest.source(searchSourceBuilder);SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);// 處理聚合結果Terms byCategory = response.getAggregations().get("by_category");for (Terms.Bucket bucket : byCategory.getBuckets()) {String category = bucket.getKeyAsString();long totalCount = bucket.getDocCount();Filter expensiveProducts = bucket.getAggregations().get("expensive_products");long expensiveCount = expensiveProducts.getDocCount();System.out.println("Category: " + category + ", Total: " + totalCount + ", Expensive: " + expensiveCount);}}
    }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84390.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84390.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84390.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++默認構造函數被隱式刪除

一、 看cppreference時,發現被隱式刪除的構造函數,查詢做如下記錄: struct F {int& ref; // reference memberconst int c; // const member// F::F() is implicitly defined as deleted };// user declared copy constructor (either …

6.ref創建對象類型的響應式數據

其實ref接收的數據可以是&#xff1a;基本類型、對象類型。若ref接收的是對象類型&#xff0c;內部其實也是調用了reactive函數。 <template><div class"person"><h2>汽車信息&#xff1a;一臺{{ car.brand }}汽車&#xff0c;價值{{ car.price }…

如何設計一個用于大規模生產任務的人工智能AI系統

部署一個SOTA模型&#xff0c;讓它服務數百萬用戶&#xff0c;處理TB級別的數據&#xff0c;并且7x24小時可靠運行是件非常有挑戰性的工作。我們將探討構建一個能夠創建LLM、多模態模型以及各種其他AI產品的大規模AI系統所需的每個開發階段。每個開發階段如何相互關聯&#xff…

國債與企業債:穩健與高收益的債券選擇

債券市場是投資者獲取穩定收益的重要渠道&#xff0c;而國債和企業債是最常見的兩種債券類型。它們雖然都屬于固定收益類產品&#xff0c;但在風險、收益和適用人群上有顯著區別。 1. 概念對比&#xff1a;國家信用 vs. 企業信用 &#xff08;1&#xff09;國債&#xff08;政…

MySQL提升

事務 事務&#xff1a;在多個操作合在一起視為一個整體。要么就不做、要么就做完。 事務應該滿足ACID A : 原子性。不可分割。C : 一致性。追求的目標&#xff0c;在開始到結束沒有發生預定外的情況。I : 隔離性。不同的事務是獨立的。D : 持久性。系統崩潰&#xff0c;數據依然…

MySQL用戶和授權

開放MySQL白名單 可以通過iptables-save命令確認對應客戶端ip是否可以訪問MySQL服務&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…

基礎篇:4. 頁面渲染流程與性能優化

頁面渲染流程與性能優化詳解&#xff08;完整版&#xff09; 一、現代瀏覽器渲染流程&#xff08;詳細說明&#xff09; 1. 構建DOM樹 瀏覽器接收到HTML文檔后&#xff0c;會逐步解析并構建DOM&#xff08;Document Object Model&#xff09;樹。具體過程如下&#xff1a; (…

vue3 vite.config.js 引入bem.scss文件報錯

[sass] Can’t find stylesheet to import. ? 1 │ use “/bem.scss” as *; │ ^^^^^^^^^^^^^^^^^^^^^^ ? src\App.vue 1:1 root stylesheet 分析 我們遇到了一個在Vue3項目中使用Vite時&#xff0c;在vite.config.js中引入bem.scss文件報錯的問題。錯誤信息指出在App.vue…

python打卡第50天

知識點回顧&#xff1a; resnet結構解析CBAM放置位置的思考針對預訓練模型的訓練策略 差異化學習率三階段微調 現在我們思考下&#xff0c;是否可以對于預訓練模型增加模塊來優化其效果&#xff0c;這里我們會遇到一個問題 預訓練模型的結構和權重是固定的&#xff0c;如果修…

MySQL 并發控制和日志

MySQL 是一個廣泛使用的關系數據庫管理系統&#xff0c;在高并發環境中&#xff0c;如何有效地控制并發和管理日志至關重要。本文將詳細介紹 MySQL 的并發控制機制和日志管理策略&#xff0c;以幫助開發人員和數據庫管理員更好地理解和優化數據庫性能。 一、并發控制 并發控制…

創意意境古風唯美中國風PPT模版分享

故宮文化經典傳統PPT模版&#xff0c;創意中國風PPT模版&#xff0c;朱紅簡約新國風PPT模版&#xff0c;意境中國風PPT模版&#xff0c;最愛中國風PPT模版&#xff0c;意境古風唯美商業計劃書PPT模版 創意意境古風唯美中國風PPT模版分享&#xff1a;古風中國風PTP模版分享https…

系統網站首頁三種常見布局vue+elementui

左中右菜單布局 <template><el-container><el-menu class"el-menu-vertical-demo" style"width: 80px; height: 100vh;"background-color"#545c64"text-color"#fff"active-text-color"#ffd04b"select"…

復習Git命令、Git命令使用流程、VSCode+Git插件管理工程源碼

目錄 1 引言 2 直接整理一個常用的流程&#xff0c;而不是死記硬背各種命令 3 解決沖突的說明和理解 4 git fetch的說明和理解 5 真正開發不用Git命令&#xff0c;而是使用VSCode插件管理工程 1 引言 以前主要用svn&#xff0c;Git用的少&#xff0c;這次再復習一下Git命…

384_C++_unit是4字節大小,能存儲32位(bit)bool操作,[7][48]這里用于計劃表的時間節點內,二維數組中每一位代表一種AI功能的開關狀態

前置了解 uint 并不是 C/C++ 標準中的 原生類型,但不同平臺或框架可能有定義。通常: 1. uint 可能是 unsigned int 的別名 在某些代碼庫(如 Arduino、某些嵌入式系統、部分庫的頭文件)中,uint 可能被定義為:typedef unsigned int uint;此時,uint 的大小和 unsigned in…

css~word-break屬性

CSS中如何強制換行“....................................”&#xff1f; 當盒子寬度能放下“...”元素時&#xff0c;正常展示如下&#xff1a; 當盒子寬度不夠放“...”元素時&#xff0c;文本就會溢出&#xff0c;導致整個內容被截斷&#xff1a; 如何才能讓其正常展示而不…

【Algorithm】Union-Find簡單介紹

文章目錄 Union-Find1 基本概念1.1 Find(x) - 查詢操作1.2 Union(x, y) - 合并操作 2 并查集的結構和優化2.1 數據結構設計2.2 兩大優化策略&#xff08;關鍵&#xff09;2.2.1 路徑壓縮&#xff08;Path Compression&#xff09;2.2.2 按秩合并&#xff08;Union by Rank or S…

LeetCode 高頻 SQL 50 題(基礎版)之 【高級字符串函數 / 正則表達式 / 子句】· 上

題目&#xff1a;1667. 修復表中的名字 題解&#xff1a; select user_id, concat(upper(left(name,1)),lower(right(name,length(name)-1))) name from Users order by user_id題目&#xff1a;1527. 患某種疾病的患者 題解&#xff1a; select * from Patients where con…

Linux系統的CentOS7發行版安裝MySQL80

文章目錄 前言Linux命令行內的”應用商店”安裝CentOS的安裝軟件的yum命令安裝MySQL1. 配置yum倉庫2. 使用yum安裝MySQL3. 安裝完成后&#xff0c;啟動MySQL并配置開機自啟動4. 檢查MySQL的運行狀態 MySQL的配置1. 獲取MySQL的初始密碼2. 登錄MySQL數據庫系統3. 修改root密碼4.…

Java + Spring Boot項目枚舉(Enum)目錄建議

在Java Spring Boot項目中&#xff0c;枚舉&#xff08;Enum&#xff09;的定義文件沒有固定的強制目錄&#xff0c;但通常遵循項目結構和最佳實踐來組織代碼。以下是常見的推薦位置&#xff1a; 1. 領域模型相關枚舉 目錄: domain/enums 或 model/enums 場景: 當枚舉與業務模…

Vue 模板語句的數據來源

&#x1f9e9; Vue 模板語句的數據來源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表達式、指令綁定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一個特定的作用域內求值。這個作用域由當前 組件…