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

在之前的文章 “Elasticsearch:使用 Runtime fields 对索引字段进行阴影处理以修复错误 – 7.11 发布”,我展示了如何使用 runtime field 来 shadow 一个已有的在 mapping 中的字段,比如 duration。在今天的练习中,我将展示如何创建一个崭新的字段并进行数据的统计。在这里请注意的是:新增加的 runtime field 并不在 source 中添加,而只是在查询时生成的,也即 schema on read。

在接下来的练习中,它包含创建 runtime field 的演示,其中从包含日期的时间戳字段中计算星期几。 然后使用索引字段和新创建的 runtime field 在 Kibana Lens 中创建可视化文件。 Runtime field 是在 Elasticsearch 中读取时为 schema 的实现提供的名称。

展示

我们先来创建一个 index mapping:

#Create the index mapping

PUT date_to_day

{

"mappings": {

"properties": {

"timestamp": {

"type": "date",

"format": "yyyy-MM-dd"

},

"response_code": {

"type": "integer"

}

}

}

}

在上面,我们展示了两个字段: timestamp 以及 response_code。由于有一个时间戳,我们可以从这个时间戳中导出时间所在的 day of week,也就是星期几。这个对于我们想对一周的每一天统计非常有用。

我们通过如下的 bulk API 来导入数据:

#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"}

由于我们想对一周内的每一天来进行统计。一种办法是重新建立一个新的 mapping。在这个新的 mapping 里包含这个 day of week 的定义。并在数据导入之前我们对数据进行处理。在实际的使用中,面对大量的已有数据,这样的处理可能非常费力。我们可以使用 runtime field 来完成想要的功能。

在搜索请求时使用

由于 runtime field 是动态生成的,它需要计算机来进行处理。在很多的时候,我们并不想修改 mapping 来完成。我们只想针对一些搜索来进行生成这个 runtime field,或者只是作为在修改 mapping 前的一个练习来验证 runtime field 的正确性。我们使用如下的命令来生产这类的 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"

}

}

}

}

在上面的命令中,我们可以仔细阅读这个部分:

"runtime_mappings": {

"day_of_week": {

"type": "keyword",

"script": {

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

}

}

},

这个不是是使用 script 来生成一个叫做 day_of_week 的 runtime 字段。而这个字段只存在于这个搜索中。在执行完这个搜索后,这字段将自动消失。这个 day_of_week 字段是根据 timestamp 导引出来的,是之前的 mapping 中完全没有的字段。

上面命令的执行结果为:

{

"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

}

]

}

}

}

在上面显示,我们对一周内的每一天进行了统计。

在 index mapping 中使用

当然在很多的情况下,我们希望这个字段一直存在于索引的 mapping 中。这样做的好处是,我们可以在 Kibana 中的可视化中直接使用被定义的 runtime fields。我们可以通过如下的方法来定义:

#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 }

}

}

我们可以通过如下的命令来查看 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 中去创建一个索引模式并查看它的字段定义:

6bcc75b67162529f93d9342154669dff.png

dddbcbe240c6d29641d7f06cc5a024c4.png

0d4b4d551386c35a2783e6f686a167ba.png

02a5d28f41d043b3d7f236cbe874306a.png

99f90ed3e756d04f718f958636234780.png

从上面我们可以看出来一个新增加的 day_of_week 的字段。

我们可以在 Kibana 中直接使用这个字段并进行可视化:

d0eb4ef0ff347e6cd63866190cf9a4bc.png

当然,也许你怀疑是不是索引的 source 是否已经包含新生成的 day_of_week 字段,我们可以通过如下的命令来查看:

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 并没有任何tgcode的改变。 day_of_week 只是 schema on read。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java根据uml图写出实现代码,根据java代码生成UML图

根据java代码生成UML图根据java代码生成UML图这里介绍一个简单易用的eclipse插件ModelGoon,用来对已有代码生成UML图,下面以之前文章中的spring mvc工程为例如何安装和使用这个插件;这个spring mvc工程的代码在githbu上,地址是&am…

highcharts php 动态数据,php动态传数据到highcharts的方法

本文主要介绍了通过php动态传数据到highcharts的相关知识。具有很好的参考价值。1:在平时工作中,在对数据进行展示的时候,是直接通过后台提供的接口来获取json串,用来展示。今天别人问怎么在本地演示一下请求的动态数据。2&#x…

php tar.gz文件,PHP解压tar.gz格式文件的方法,_PHP教程

PHP解压tar.gz格式文件的方法,本文实例讲述了PHP解压tar.gz格式文件的方法。分享给大家供大家参考,具体如下:1、运用php自带压缩与归档扩展(phar)$phar new PharData(song.tar.gz);//路径 要解压的文件 是否覆盖$phar->extractTo(c:/tmp,…

创建数组表格PHP苹果价格,如何从PHP数组创建HTML表?

Cats萌萌这是我的&#xff1a;<?php function build_table($array){ // start table $html . htmlspecialchars($key) . . htmlspecialchars($value2) .

python打包exe报错编码问题,使用Python打包含有pymssql成exe所躺的坑

一、如何打包Python打包exe文件简单运用pyinstaller库就行了1)安装pyinstaller库(自行安装)2)winR打开运行窗口输入“powershell”3)输入pyinstaller -F 路径\文件名.py(打包py文件的路径&#xff0c;py不能省略)看到successfully即为打包成功&#xff0c;但不一定能运用的&…

php超大树形分页,PHP+MySql千万级数据limit分页优化方案

PHPMySql千万级数据limit分页优化方案1年前阅读 2750评论 0喜欢 0### 原因徒弟突然有个需求&#xff0c;就是他发现limit分页&#xff0c;页数越大之后&#xff0c;mysql的消耗越大&#xff0c;查询时间越长&#xff0c;当突破百万级数据之后&#xff0c;一个简单的翻页都需要5…

linux自启动配置文件,Linux中如何设置服务自启动?

有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务&#xff0c;主要用三种方式进行这一操作&#xff1a;ln -s 在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0&#xff5e;6七个运行级别之一)chkonfig 命令行运行级别设置nts…

linux系统下升级node,linux下安装指定版本的nodejs(升级到指定版本)

原因最近需要全栈开发但是服务器是linux系统&#xff0c;服务本身通过yum安装软件包&#xff0c;不过yum安装的nodejs版本太低。所以需要自己安装。方案下载编译好的文件解压后直接运行即可&#xff0c;不过我们需要全局运行node命令。只需要把目录设置为全局即可(建立软链接 l…

Linux bash卸载软件,Ubuntu卸载软件的4种方法

前言本文重点介绍Ubuntu卸载软件的4种方法。他们分别是图形化界面的synaptic、自动解决依赖关系的apt-get&#xff0c;处理依赖关系更强大的aptitude&#xff0c;还有安装本地deb包的dpkg。方法一: Ubuntu使用synaptic图形化界面管理软件oucanrongzcwyou:~$ sudo apt-get insta…

linux系统atom安装教程,Ubuntu/Linux Mint上安装Atom文本编辑器

Atom是一款由Github开发的开源文本编辑器&#xff0c;虽然目前该软件依然在Beta阶段&#xff0c;但我们依然可以在你的Ubuntu/Linux Mint上使用它。据Atom官方博客介绍&#xff0c;与Atom类似的编辑器Sublime和TextMate都深受开发者欢迎&#xff0c;但在扩展性上都有所限制&…

labview 远程连接linux,SSH交互式通信总结:expect、plink、putty、sshpass、ALAB SSH

关于在linux脚本中远程执行命令的问题&#xff0c;笔者在以前文章中可以使用expect工具来完成交互式通信。在windows平台下可以使用plink或者putty工具。免密也可以设置SSH秘钥&#xff0c;参考文章-Linux怎么远程执行指令呢-SSH秘钥。但是在linux下需要一一对应设置&#xff0…

tcping在linux用法,tcping的安装和使用

Tcping 网上比较少资料是关于linux对tcp端口ping测试的方法&#xff0c;我这里简单介绍2种方法&#xff1a; 1.yum安装&#xff0c;编译安装方法 1-1.wget http://linuxco.de/tcping/tcping-1.3.5.tar.gz ###下载tcping1-2 tar zxvf tcping-1.3.5.tar.gz ####解压缩tcping-1.3.…

linux子系统安装gromacs,科学网—Windows下GROMACS程序的编译 - 李继存的博文

2015-12-07 22:12:05总的来说, Windows下的GROMACS程序用于模拟意义不大, 对于长时间的模拟, 我都是放在Linux服务器上进行的. 但将Windows下的GROMACS程序作为一个辅助工具来使用还是有意义的. 因为大多数时候, 我都是在Windows下准备输入文件的, 然后测试一下准备好的输入文件…

林锐 高质量c语言编程下载,新年献礼:Go语言深度入门手册

(文末的阅读原文&#xff0c;效果最佳&#xff01;)作者&#xff1a;李佶澳 微信&#xff1a;lijiaocnGo 语言深度入门手册&#xff0c;帮你更好的理解 Go 语言&#xff0c;写出更高效、更规范、更不易出错的代码。Go 在 2012 年发布 1.0 版本&#xff0c;距今已经 8 年了。和历…

永洪报表工具_2020年最值得推荐的五大BI工具

现在很多公司和业务部门都十分注重数据分析&#xff0c;并为企业信息化建设做准备。以前收集、处理、分析数据可能是IT部门和数据库员的专属&#xff0c;现在很多业务部门都急切的开始用数据分析的思维分析业务问题。在过去&#xff0c;大多数数据人员的工作模式都是自己使用ex…

容量耦合系数模型_期刊在线 | 基于ALE流固耦合方法的刷式密封泄漏特性理论与实验研究...

01引言刷式密封是一种广泛应用于航空发动机等透平机械的优良接触式动密封[]。近年来&#xff0c;随着透平机械逐渐向高参数方向发展&#xff0c;由刷式密封引起的泄漏损失越来越大&#xff0c;直接影响透平机械的工作效率。因此开展刷式密封的泄漏流动特性研究具有重要理论和实…

设备管理器android感叹号,设备管理器其他设备感叹号

设备管理器其他设备感叹号客观地讲&#xff0c;常规的设备管理器问题与设备管理器在哪&#xff0c;设备管理其怎么打开以及设备管理其其他设备感叹号是什么问题等。本文重点介绍设备设备管理器其他设备感叹号相关问题&#xff0c;希望能够为对此有需求的朋友提供参考或帮助。设…

android studio 集成 第三方sdk,Android FrameWork集成第三方SDK的jar包和so庫

本文講解的如何在Android FrameWork如何集成XXXsdk的jar包和so庫首先在framework/opt/建立XXSDK的文件夾講jar包和so庫拷貝進去1:framework/opt/xxsdk/然后直接看Android.mk就行# Copyright (C) 2009 The Android Open Source Project## Licensed under the Apache License, Ve…

unity要学ecs吗_ECS的泛泛之谈

这篇文章将带着你从设计出发重新发现ECS。注意:此篇为泛泛之谈&#xff0c;不涉及具体实现。从Abstract说起从”是”到”能”再到”有”对对象的抽象是整理代码的要点&#xff0c;继承是一种比较古老并常见的抽象&#xff0c;其描述了一个对象"是"什么&#xff0c;其…

条令考试小程序辅助器_计算机一级考试干货!

计算机一级考试干货一年两度的计算机等级考试就要在2019年3月30-31日期间开始啦&#xff01;为了更好的让同学们了解考试的大体内容&#xff0c;我们已整理如下内容&#xff0c;可以供大家参考。同时&#xff0c;希望大家认真备考&#xff0c;争取都一次性过哦&#xff01;考试…