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 写 gz_java简写名词解释 - osc_gzyujipq的个人空间 - OSCHINA - 中文开源技术交流社区...

RPC(Remote Procedure Call)—远程过程调用实时编译器(Just In Time Compiler,JIT)XML 指可扩展标记语言(EXtensible Markup Language)WSDL 指网络服务描述语言 (Web Services Description Language)UDDI,英文为 "Universal Description, Discovery…

java 提取电话号码_java – 如何使用正则表达式提取字符串的电话号码?

如果我有一个包含以下内容的字符串:这是1测试123-456-7890我需要提取1234567890作为电话号码.我不想提取测试前的数字1.如何在java中使用正则表达式?我知道一种方法,但我不确定它是否是最好的解决方案:String inputString "This is 1 t…

asp连接mysql oledb_provider=microsoft.jet.oledb……数据库连接方法的疑惑?

很多朋友对ASP连接ACCESS数据库的方法不太熟悉.下面把几种方法列举出来,需要用的时候或者自己的程序出现问题的时候与这些源程序对照一下,说不定会有所启发.1.set dbconnectionServer.CREATEOBJECT("ADODB.CONNECTION")DBPath Server.MapPath("customer.mdb&qu…

php中统计记录条数,使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT

例如这样一个表,我想统计email和passwords都不相同的记录的条数CREATE TABLE IF NOT EXISTS test_users (email_id int(11) unsigned NOT NULL auto_increment,email char(100) NOT NULL,passwords char(64) NOT NULL,PRIMARY KEY (email_id)) ENGINEMyISAM DEFAULT…

php验证旧密码,PHP最佳实践之过滤、验证、转义和密码

过滤、验证和转义1).不要相信任何来自不受自己直接控制的数据源中的数据。包括但不限于:$_GET$_POST$_REQUEST$_COOKIE$argvfile_get_contents()远程数据库远程API来自客户端的数据2).解决办法:过滤输入。删除不安全的字符,在数据到达应用的存…

java pc端软件抓包,如何通过抓包工具fiddler获取java程序的http请求

抓包工具fidder是一个很轻巧的可以获取浏览器,程序的http,https请求的软件。百科地址:http://baike.baidu.com/view/868685.htm官网地址:http://fiddler2.com而java程序需要设置proxy才能生效:Proxy proxy new Proxy(…

linux php c 扩展,linux下编写php5.6的C扩展模块(双向链表)

cd /usr/local/src/php-5.6.7/ext/./ext_skel --extnamephp_listcd php_listvim config.m4PHP_ARG_ENABLE(php_list, whether to enable php_list support,dnl Make sure that the comment is aligned:[ --enable-php_list Enable php_list support])(dnl是注释标签…

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

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

php递归 返回数组,php 递归 无限级分类并返回数组的例子

/*** 递归 无限级分类 返回数组* link:www.jquerycn.cn* date:2013/2/21*/$conn mysql_connect(localhost,root,123456);mysql_select_db(test);mysql_query("set names utf8");function getCate($pid 0){$sql "select * from cate wh…

php电商网站开发流程图,php网上购物平台设计+ER图+流程图.doc

php网上购物平台设计ER图流程图php网上购物平台设计ER图流程图摘要:广义来说,电子商务是指电子工具在商务活动中的应用。狭义来说,电子商务是在技术、经济高度发达的现代社会里,掌握信息技术和商务规则的人,系统化运用…

常见php面试题,常见的 PHP 面试题和答案分享

搜索热词如何直接将输出显示给浏览器?将输出直接显示给浏览器,我们必须使用特殊标记 。PHP 是否支持多重继承?PHP 只支持单继承。PHP 的类使用关键字 extends 继承另一个类获取图片属性(size,width,和 height)的函数是什么?获取图…

php 查找数组相同元素,查找数组中重复的元素

本文收集整理关于查找数组中重复的元素的相关议题,使用内容导航快速到达。内容导航:Q1:在c语言中输入数组两个数组,查找重复元素并输出怎么写啊可以一次读入N个数据。可以考虑以回车结束读入的一组。参考如下写法:#inc…

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

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

asm 5 java,java – 使用ASM(5.x)在字节代码中检测运行时的递归方法调用:howto?

问题如下;Java代码中的方法是:Rule foo(){return sequence(foo(), x());}这将引发解析循环,当然应该避免;但是,这是合法的:Rule foo(){return sequence(x(), foo());}现在,代码中的其他地方我可以访问RuleMethod,这是一个扩展MethodNode的类,因此我可以访…

mysql外键设置sql语句,SQL Server 2008之SQL语句外键

xin3721网络学院为广大学员,准备了丰富了教学视频。为了更好的让大学配合视频进行学习,拓展学员的知识面,我站特整理了大量的,技术文章,供学员参考。因此本教案需配合视频教程学习,视频教程地址为&#xff…

nginx index.php 端口,请教下 nginx 配置域名反代到本地端口这里面应该怎么加。

域名 1.31.tw 怎么添加反代可以正常访问 127.0.0.1:5000 端口? 我自己加的反代在域名开启 ssl 下 css 不正常,错位。弄一天了没弄明白,求大佬。谢谢下面是配置文件:server {listen 80;listen 443 ssl http2;ssl_certificate /usr/local/ngin…

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,…

java 像素级碰撞检测,» 像素级碰撞检测类

//像素级碰撞检测package{import flash.display.BitmapData;import flash.display.BlendMode;import flash.display.DisplayObject;import flash.display.Sprite;import flash.geom.ColorTransform;import flash.geom.Matrix;import flash.geom.Point;import flash.geom.Rectan…

matlab暂态信号,MATLAB6在电力暂态波形仿真实现中的应用

1概述现代继电保护不但要测量电力系统稳态情况下的特性,还要测量电子系统暂态情况下的特性。对绝大多数保护装置来说,不可能利用实际电力系统的人工短路试验来检验其性能。继电保护试验设备应具有仿真能力,能模拟电力系统发生各种故障和不正常状态时的暂态过程,特别是严重畸变的…

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

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