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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

kibana java script_Elasticsearch:创建 Runtime field 并在 Kibana 中使用它 - 7.11 发布 - TGCode...

發(fā)布時(shí)間:2025/3/12 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kibana java script_Elasticsearch:创建 Runtime field 并在 Kibana 中使用它 - 7.11 发布 - TGCode... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在之前的文章 “Elasticsearch:使用 Runtime fields 對(duì)索引字段進(jìn)行陰影處理以修復(fù)錯(cuò)誤 – 7.11 發(fā)布”,我展示了如何使用 runtime field 來(lái) shadow 一個(gè)已有的在 mapping 中的字段,比如 duration。在今天的練習(xí)中,我將展示如何創(chuàng)建一個(gè)嶄新的字段并進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)。在這里請(qǐng)注意的是:新增加的 runtime field 并不在 source 中添加,而只是在查詢時(shí)生成的,也即 schema on read。

在接下來(lái)的練習(xí)中,它包含創(chuàng)建 runtime field 的演示,其中從包含日期的時(shí)間戳字段中計(jì)算星期幾。 然后使用索引字段和新創(chuàng)建的 runtime field 在 Kibana Lens 中創(chuàng)建可視化文件。 Runtime field 是在 Elasticsearch 中讀取時(shí)為 schema 的實(shí)現(xiàn)提供的名稱。

展示

我們先來(lái)創(chuàng)建一個(gè) index mapping:

#Create the index mapping

PUT date_to_day

{

"mappings": {

"properties": {

"timestamp": {

"type": "date",

"format": "yyyy-MM-dd"

},

"response_code": {

"type": "integer"

}

}

}

}

在上面,我們展示了兩個(gè)字段: timestamp 以及 response_code。由于有一個(gè)時(shí)間戳,我們可以從這個(gè)時(shí)間戳中導(dǎo)出時(shí)間所在的 day of week,也就是星期幾。這個(gè)對(duì)于我們想對(duì)一周的每一天統(tǒng)計(jì)非常有用。

我們通過(guò)如下的 bulk API 來(lái)導(dǎo)入數(shù)據(jù):

#Load a few documents to work with

POST date_to_day/_bulk

{"index":{}}

{"response_code": 200, "timestamp": "2021-01-01"}

{"index":{}}

{"response_code": 300, "timestamp": "2021-01-03"}

{"index":{}}

{"response_code": 200, "timestamp": "2021-01-04"}

{"index":{}}

{"response_code": 400, "timestamp": "2021-01-01"}

{"index":{}}

{"response_code": 300, "timestamp": "2021-01-05"}

{"index":{}}

{"response_code": 200, "timestamp": "2020-12-21"}

{"index":{}}

{"response_code": 200, "timestamp": "2021-01-02"}

{"index":{}}

{"response_code": 200, "timestamp": "2021-01-08"}

{"index":{}}

{"response_code": 300, "timestamp": "2021-01-09"}

{"index":{}}

{"response_code": 400, "timestamp": "2021-01-09"}

由于我們想對(duì)一周內(nèi)的每一天來(lái)進(jìn)行統(tǒng)計(jì)。一種辦法是重新建立一個(gè)新的 mapping。在這個(gè)新的 mapping 里包含這個(gè) day of week 的定義。并在數(shù)據(jù)導(dǎo)入之前我們對(duì)數(shù)據(jù)進(jìn)行處理。在實(shí)際的使用中,面對(duì)大量的已有數(shù)據(jù),這樣的處理可能非常費(fèi)力。我們可以使用 runtime field 來(lái)完成想要的功能。

在搜索請(qǐng)求時(shí)使用

由于 runtime field 是動(dòng)態(tài)生成的,它需要計(jì)算機(jī)來(lái)進(jìn)行處理。在很多的時(shí)候,我們并不想修改 mapping 來(lái)完成。我們只想針對(duì)一些搜索來(lái)進(jìn)行生成這個(gè) runtime field,或者只是作為在修改 mapping 前的一個(gè)練習(xí)來(lái)驗(yàn)證 runtime field 的正確性。我們使用如下的命令來(lái)生產(chǎn)這類的 runtime field:

#Create an ephemeral runtime field for day of week and aggregate on it

GET date_to_day/_search

{

"runtime_mappings": {

"day_of_week": {

"type": "keyword",

"script": {

"source": """emit(doc['timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.SHORT, Locale.ROOT))"""

}

}

},

"size": 0,

"aggs": {

"terms": {

"terms": {

"field": "day_of_week"

}

}

}

}

在上面的命令中,我們可以仔細(xì)閱讀這個(gè)部分:

"runtime_mappings": {

"day_of_week": {

"type": "keyword",

"script": {

"source": """emit(doc['timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.SHORT, Locale.ROOT))"""

}

}

},

這個(gè)不是是使用 script 來(lái)生成一個(gè)叫做 day_of_week 的 runtime 字段。而這個(gè)字段只存在于這個(gè)搜索中。在執(zhí)行完這個(gè)搜索后,這字段將自動(dòng)消失。這個(gè) day_of_week 字段是根據(jù) timestamp 導(dǎo)引出來(lái)的,是之前的 mapping 中完全沒(méi)有的字段。

上面命令的執(zhí)行結(jié)果為:

{

"took" : 16,

"timed_out" : false,

"_shards" : {

"total" : 1,

"successful" : 1,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : {

"value" : 10,

"relation" : "eq"

},

"max_score" : null,

"hits" : [ ]

},

"aggregations" : {

"terms" : {

"doc_count_error_upper_bound" : 0,

"sum_other_doc_count" : 0,

"buckets" : [

{

"key" : "Fri",

"doc_count" : 3

},

{

"key" : "Sat",

"doc_count" : 3

},

{

"key" : "Mon",

"doc_tgcodecount" : 2

},

{

"key" : "Sun",

"doc_count" : 1

},

{

"key" : "Tue",

"doc_count" : 1

}

]

}

}

}

在上面顯示,我們對(duì)一周內(nèi)的每一天進(jìn)行了統(tǒng)計(jì)。

在 index mapping 中使用

當(dāng)然在很多的情況下,我們希望這個(gè)字段一直存在于索引的 mapping 中。這樣做的好處是,我們可以在 Kibana 中的可視化中直接使用被定義的 runtime fields。我們可以通過(guò)如下的方法來(lái)定義:

#Add the runtime field to the index mapping

PUT date_to_day/_mapping

{

"runtime": {

"day_of_week": {

"type": "keyword",

"script": {

"source": """emit(doc['timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.SHORT, Locale.ROOT))"""

}

tgcode }

}

}

我們可以通過(guò)如下的命令來(lái)查看 date_to_day 索引的 mapping:

{

"date_to_day" : {

"mappings" : {

"runtime" : {

"day_of_week" : {

"type" : "keyword",

"script" : {

"source" : "emit(doc['timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.SHORT, Locale.ROOT))",

"lang" : "painless"

}

}

},

"properties" : {

"response_code" : {

"type" : "integer"

},

"timestamp" : {

"type" : "date",

"format" : "yyyy-MM-dd"

}

}

}

}

}

我們到 Kibana 的 index pattern 中去創(chuàng)建一個(gè)索引模式并查看它的字段定義:

從上面我們可以看出來(lái)一個(gè)新增加的 day_of_week 的字段。

我們可以在 Kibana 中直接使用這個(gè)字段并進(jìn)行可視化:

當(dāng)然,也許你懷疑是不是索引的 source 是否已經(jīng)包含新生成的 day_of_week 字段,我們可以通過(guò)如下的命令來(lái)查看:

GET date_to_day/_search

上面的命令顯示:

{

"took" : 1,

"timed_out" : false,

"_shards" : {

"total" : 1,

"successful" : 1,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : {

"value" : 10,

"relation" : "eq"

},

"max_score" : 1.0,

"hits" : [

{

"_index" : "date_to_day",

"_type" : "_doc",

"_id" : "_iyDlXcBjSpwk8PH7vNz",

"_score" : 1.0,

"_source" : {

"response_code" : 200,

"timestamp" : "2021-01-01"

}

},

{

"_index" : "date_to_day",

"_type" : "_doc",

"_id" : "_yyDlXcBjSpwk8PH7vNz",

"_score" : 1.0,

"_source" : {

"response_code" : 300,

"timestamp" : "2021-01-03"

}

},

{

"_index" : "date_to_day",

"_type" : "_doc",

"_id" : "ACyDlXcBjSpwk8PH7vRz",

"_score" : 1.0,

"_source" : {

"response_code" : 200,

"timestamp" : "2021-01-04"

}

},

...

顯然,我們的 source 并沒(méi)有任何tgcode的改變。 day_of_week 只是 schema on read。

總結(jié)

以上是生活随笔為你收集整理的kibana java script_Elasticsearch:创建 Runtime field 并在 Kibana 中使用它 - 7.11 发布 - TGCode...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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