成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Elasticsearch Global 、 Filters 和 Cardinality 聚合

開發 前端
global聚合是全局聚合,是對所有的文檔進行聚合,而不受查詢條件的限制。global 聚合器只能作為頂級聚合器,因為將一個 global 聚合器嵌入另一個桶聚合器是沒有意義的。

一、背景

此處將單記錄一下 global 、 filterscardinality的聚合操作。

二、解釋

1、global

global聚合是全局聚合,是對所有的文檔進行聚合,而不受查詢條件的限制。

global 聚合器只能作為頂級聚合器,因為將一個 global 聚合器嵌入另一個桶聚合器是沒有意義的。

比如: 我們有50個文檔,通過查詢條件篩選之后存在10個文檔,此時我想統計總共有多少個文檔。是50個,因為global統計不受查詢條件的限制。

2、filters

定義一個多桶聚合,其中每個桶都與一個過濾器相關聯。每個桶都會收集與其關聯的過濾器匹配的所有文檔。

比如: 我們總共有50個文檔,通過查詢條件篩選之后存在10個文檔,此時我想統計 這10個文檔中,出現info詞語的文檔有多少個,出現warn詞語的文檔有多少個。

3、cardinality

類似于 SQL中的 COUNT(DISTINCT(字段)),不過這個是近似統計,是基于 HyperLogLog++ 來實現的。

三、需求

我們有一組日志,每條日志都存在idmessage2個字段。此時根據message字段過濾出存在info warn的日志,然后進行統計:

  1. 系統中總共有多少條日志(global + cardinality)
  2. info和warn級別的日志各有多少條(filters)

4、前置條件

4.1 創建mapping

PUT /index_api_log
{
"settings": {
"number_of_shards": 1
},
"mappings": {
"properties": {
"message":{
"type": "text"
},
"id": {
"type": "long"
}
}
}
}

4.2 準備數據

PUT /index_api_log/_bulk
{"index":{"_id":1}}
{"message": "this is info message-01","id":1}
{"index":{"_id":2}}
{"message": "this is info message-02","id":2}
{"index":{"_id":3}}
{"message": "this is warn message-01","id":3}
{"index":{"_id":4}}
{"message": "this is error message","id":4}
{"index":{"_id":5}}
{"message": "this is info and warn message","id":5}

5、實現3的需求

5.1 dsl

POST /index_api_log/_search
{
"size": 0,
"query": {
"bool": {
"must": [
{
"match": {
"message": "info warn"
}
}
]
}
},
"aggregations": {
"agg_01": {
"filters": {
"filters": {
"info": {
"match": {
"message": "info"
}
},
"warn": {
"match": {
"message": "warn"
}
}
},
"other_bucket": true,
"other_bucket_key": "other"
}
},
"agg_02":{
"global": {},
"aggs": {
"total": {
"cardinality": {
"field": "id",
"precision_threshold": 30000
}
}
}
}
}
}

5.2 java 代碼

@Test
@DisplayName("global and filters and cardinality 聚合")
public void test01() throws IOException {
SearchRequest request = SearchRequest.of(searchRequest ->
searchRequest.index("index_api_log")
// 查詢 message 中存在 info 和 warn 的日志
.query(query -> query.bool(bool -> bool.must(must -> must.match(match -> match.field("message").query("info warn")))))
// 查詢的結果不返回
.size(0)
// 第一個聚合
.aggregations("agg_01", agg ->
agg.filters(filters ->
filters.filters(f ->
f.array(
Arrays.asList(
// 在上一步query的結果中,將 message中包含info的進行聚合
Query.of(q -> q.match(m -> m.field("message").query("info"))),
// 在上一步query的結果中,將 message中包含warn的進行聚合
Query.of(q -> q.match(m -> m.field("message").query("warn")))
)
)
)
// 如果上一步的查詢中,存在非 info 和 warn的則是否聚合到 other 桶中
.otherBucket(true)
// 給 other 桶取一個名字
.otherBucketKey("other")
)
)
// 第二個聚合
.aggregations("agg_02", agg ->

agg
// 此處的 global 聚合只能放在頂部
.global(global -> global)
// 子聚合,數據來源于所有的文檔,不受上一步query結果的限制
.aggregations("total", subAgg ->
// 類似于SQL中的 count(distinct(字段)),是一個近似統計
subAgg.cardinality(cardinality ->
// 統計的字段
cardinality.field("id")
// 精度,默認值是30000,最大值也是40000,不超過這個值的聚合近似準確值
.precisionThreshold(30000)
)
)
)
);
System.out.println("request: " + request);
SearchResponse<String> response = client.search(request, String.class);
System.out.println("response: " + response);
}

5.3 運行結果

運行結果

6、實現代碼

??https://gitee.com/huan1993/spring-cloud-parent/blob/master/es/es8-api/src/main/java/com/huan/es8/aggregations/bucket/GlobalAndFiltersAggs.java??

7、參考文檔

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

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-12-28 08:16:16

metric聚合java

2022-12-30 09:12:55

查詢es搜索值

2023-11-30 15:23:07

聚合查詢數據分析

2025-01-13 00:08:01

2013-12-26 16:24:13

Android開發Android應用Intents

2017-05-04 10:33:25

Elasticsearelasticsear安裝

2022-03-04 08:00:00

Java Strea數據函數

2023-01-29 10:36:33

LinuxGNOME

2012-09-13 09:47:16

CA收購PGTI

2019-08-14 09:42:06

LinuxElasticsearKibana

2016-10-08 15:42:02

ElasticsearcAdvisorDocke

2025-02-08 17:30:00

布隆過濾器數據結構

2018-04-20 15:56:09

Pythonglobal關鍵字

2010-09-21 03:52:06

2014-08-06 13:42:04

HID Global身份驗證

2021-11-07 07:45:39

ODBParser數據安全安全工具

2014-09-24 11:01:10

多路鏡像流量聚合鏡像流量

2024-10-11 16:51:02

2024-12-26 07:33:02

2022-09-29 10:51:18

ShellLinux命令審計
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 毛片免费看 | 欧美日韩国产传媒 | 欧美精品首页 | 91精品午夜窝窝看片 | 国产精品精品视频一区二区三区 | 欧美日韩不卡在线 | 91成人| 亚洲午夜精品在线观看 | 亚洲成人网在线 | 亚洲国产视频一区二区 | 日本精品一区二区三区在线观看视频 | 国产精品日韩欧美一区二区 | 欧美一级二级三级 | 在线午夜| 国产日韩精品一区 | 成人在线中文字幕 | 中文字幕在线观看国产 | 国产人成精品一区二区三 | 国产精品一区二区欧美黑人喷潮水 | 久草综合在线视频 | 国产激情精品一区二区三区 | 精品视频一区二区三区在线观看 | 成av在线| 国产精品永久久久久 | 国产精品毛片一区二区三区 | 在线观看视频91 | 91九色在线观看 | 午夜精品三区 | 国产色婷婷精品综合在线手机播放 | 国产一区欧美 | 成人欧美一区二区三区黑人孕妇 | 午夜小电影 | 日韩欧美网| 日韩中文字幕在线 | 521av网站 | 在线播放一区 | 欧美日韩电影一区 | 久久亚洲国产精品 | 农村真人裸体丰满少妇毛片 | 中文字幕乱码一区二区三区 | 国产精品久久久久久久久久软件 |