日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...

發(fā)布時間:2023/12/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這一節(jié)筆記還是聚合查詢,以下是本節(jié)目錄:去重統(tǒng)計 cardinality

基礎(chǔ)統(tǒng)計 stats

百分位 percentiles

字符串統(tǒng)計 string_stats

1、去重統(tǒng)計 cardinality

去重統(tǒng)計,就是統(tǒng)計某個字段的值,去重后的數(shù)量。

先導(dǎo)入如下數(shù)據(jù):

PUT /exam/_doc/1

{

"name" : "hunter",

"grade": 60

}

PUT /exam/_doc/2

{

"name" : "paul",

"grade": 80

}

PUT /exam/_doc/3

{

"name" : "jack",

"grade": 90

}

PUT /exam/_doc/4

{

"name" : "tom",

"grade": 90

}

執(zhí)行下面的語句查詢:

GET /exam/_search

{

"size": 0,

"aggs": {

"grade_dictinct_count": {

"cardinality": {

"field": "grade"

}

}

}

}

返回的結(jié)果主體:

"aggregations" : {

"grade_dictinct_count" : {

"value" : 3

}

}

因為在導(dǎo)入的數(shù)據(jù)中有兩個 grade 是一樣的值,所以返回的統(tǒng)計的去重后的數(shù)是 3

對應(yīng)于 MySQL 中的語法是:

SELECT COUNT(DISTINCT grade) FROM table_name;

2、統(tǒng)計 stats

對數(shù)據(jù)進(jìn)行一個簡單的統(tǒng)計,一次性返回 總數(shù)、最大值、最小值、平均值、總和。

使用方法如下:

GET /bank/_search

{

"size": 0,

"aggs": {

"age_stats": {

"stats": {

"field": "age"

}

}

}

}

返回的結(jié)果:

"aggregations" : {

"age_stats" : {

"count" : 1000,

"min" : 20.0,

"max" : 40.0,

"avg" : 30.171,

"sum" : 30171.0

}

}

使用腳本:

也可以通過使用腳本的方式得到上面的結(jié)果:

GET /bank/_search

{

"size": 0,

"aggs": {

"agg_stats": {

"stats": {

"script": {

"lang": "painless",

"source": "doc['age'].value"

}

}

}

}

}

結(jié)果:

"aggregations" : {

"agg_stats" : {

"count" : 1000,

"min" : 20.0,

"max" : 40.0,

"avg" : 30.171,

"sum" : 30171.0

}

}

對返回的結(jié)果進(jìn)行二次運算:

對返回的結(jié)果可以進(jìn)行二次計算,實現(xiàn)比如對數(shù)據(jù)進(jìn)行修正的功能

GET /bank/_search

{

"size": 0,

"aggs": {

"agg_stats": {

"stats": {

"field": "age",

"script": {

"lang": "painless",

"source": "_value * params.correction",

"params": {

"correction": 1.2

}

}

}

}

}

}

返回結(jié)果:

"aggregations" : {

"agg_stats" : {

"count" : 1000,

"min" : 24.0,

"max" : 48.0,

"avg" : 36.2052,

"sum" : 36205.2

}

}

可以看到,除了總數(shù) count 沒有變化,最大值最小值等,都在原基礎(chǔ)上乘以; 1.2。

3、百分位 percentiles

使用這個查詢方式會返回各百分位數(shù)據(jù)的值。

比如 age 這個字段,按照大小排序,在 99% 的地方的值是 40,使用方法如下:

GET /bank/_search

{

"size": 0,

"aggs": {

"age_percentiles": {

"percentiles": {

"field": "age"

}

}

}

}

返回結(jié)果是:

"aggregations" : {

"age_percentiles" : {

"values" : {

"1.0" : 20.0,

"5.0" : 21.0,

"25.0" : 25.0,

"50.0" : 31.0,

"75.0" : 35.0,

"95.0" : 39.0,

"99.0" : 40.0

}

}

}

結(jié)果會默認(rèn)給定1, 5, 25, 50, 75, 95, 99 這幾個百分位的值。

也可以自定義幾個百分位:

GET /bank/_search

{

"size": 0,

"aggs": {

"age_percentiles": {

"percentiles": {

"field": "age",

"percents": [

1,

50,

95,

99,

99.5

]

}

}

}

}

就能返回自定的這些百分位的值。

前面返回的結(jié)果都是 百分位:age的值 我們也可以設(shè)置成 key-value 的形式,把 keyed 參數(shù)的值設(shè)置成 false 即可。

GET /bank/_search

{

"size": 0,

"aggs": {

"age_percentiles": {

"percentiles": {

"field": "age",

"keyed": false,

"percents": [

95,

99

]

}

}

}

}

值的反查 percentile_ranks:

前面我們是根據(jù)百分位去獲取值,我們也可以根據(jù)值來獲取所處的百分位,使用參數(shù)percentile_ranks。

GET /bank/_search

{

"size": 0,

"aggs": {

"age_percent_ranks": {

"percentile_ranks": {

"field": "age",

"values": [

35,

37,

40

]

}

}

}

}

返回結(jié)果:

"aggregations" : {

"age_percent_ranks" : {

"values" : {

"35.0" : 75.5,

"37.0" : 85.3,

"40.0" : 100.0

}

}

}

表示 age 值為 35、37、40 的分別處在數(shù)據(jù)里的這幾個百分位。

4、字符串統(tǒng)計 string_stats

為了驗證方便,我們還是用前面導(dǎo)入的 exam 這個 index。

對 name 這個字段進(jìn)行統(tǒng)計,可以返回每條數(shù)據(jù)中 name 字段的最大長度,最小長度,平均長度等值:

使用方法如下:

GET /exam/_search

{

"size": 0,

"aggs": {

"message_stats": {

"string_stats": {

"field": "name.keyword"

}

}

}

}

設(shè)置show_distribution字段為 true 可以把字母統(tǒng)計的結(jié)果返回,使用方法如下:

GET /exam/_search

{

"size": 0,

"aggs": {

"name_stats": {

"string_stats": {

"field": "name.keyword",

"show_distribution": true

}

}

}

}

返回結(jié)果如下:

"aggregations" : {

"name_stats" : {

"count" : 4,

"min_length" : 3,

"max_length" : 6,

"avg_length" : 4.25,

"entropy" : 3.7345216647797517,

"distribution" : {

"a" : 0.11764705882352941,

"t" : 0.11764705882352941,

"u" : 0.11764705882352941,

"c" : 0.058823529411764705,

"e" : 0.058823529411764705,

"h" : 0.058823529411764705,

"j" : 0.058823529411764705,

"k" : 0.058823529411764705,

"l" : 0.058823529411764705,

"m" : 0.058823529411764705,

"n" : 0.058823529411764705,

"o" : 0.058823529411764705,

"p" : 0.058823529411764705,

"r" : 0.058823529411764705

}

}

}

以下是兩種使用 script 的方法運行:

GET /exam/_search

{

"size": 0,

"aggs": {

"name_stats": {

"string_stats": {

"script": {

"lang": "painless",

"source": "doc['name.keyword'].value"

},

"show_distribution": true

}

}

}

}

另一種:

GET /exam/_search

{

"size": 0,

"aggs": {

"name_stats": {

"string_stats": {

"field": "name.keyword",

"script": {

"lang": "painless",

"source": "params.prefix + _value",

"params": {

"prefix": "name: "

}

}

}

}

}

}

總結(jié)

以上是生活随笔為你收集整理的elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。