Kibana:使用 Painless Lab 来测试代码
Posted Elastic 中国社区官方博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kibana:使用 Painless Lab 来测试代码相关的知识,希望对你有一定的参考价值。
在我之前的文章 “Elasticsearch:Painless scripting 编程实践” 中,我对 Painless 的编程做了一个介绍。Painless 的编程很强大,但是调试来说确实不是很容易。在我之前的文章 “Elasticsearch:Painless 编程调试” 有一些介绍关于如何进行调试。尽管如此,调试 Painless 有时不是一件非常容易的事。
在 Kibana 中,它集成了一个叫做 Painless Lab 的功能。Painless Lab 是一个交互式代码编辑器,可让你实时测试和调试 Painless 脚本。
警告:此功能处于测试阶段,可能会发生变化。 设计和代码不如官方 GA 功能成熟,并且按原样提供,不提供任何保证。 Beta 功能不受官方 GA 功能的支持 SLA 的约束。
为了启动,我们打开 Kibana,点击 Dev Tools,然后点击 Painless Lab:
首先,我们创建一个如下的文档:
PUT my_index/_doc/1
{
"salary" : 5000,
"bonus": 500,
"@timestamp" : "2021-02-28",
"weight": 60, "height": 175,
"name" : "Peter",
"occupation":
"software engineer",
"hobbies": ["dancing", "badminton"]
}
然后进入到 Painless Lab:
如上所示,针对 Painless 的执行上下文,我们有三种方式:
- Baisic:就像上面描述的那样,返回的是一个字符串。这种情况适用于一般的 Painless 语言编程。它不能针对文档进行操作
- Filter:使用 Filter 的上下文来进行 script query。在这种情况下,必须有相应的索引及文档才可以
- Score:使用 script_score 函数来进行 function_score query。我们必须使用索引来进行
首先,我们我们选择 Basic。在这种情况下,我们可以定义数据变量,使用 Painless 编程来进行处理。就像上面显示的那样,我们使用如下的代码:
ZonedDateTime date = ZonedDateTime.parse("2016-10-05T08:20:10+05:30[Asia/Kolkata]");
return date.getMonthValue();
我们点击 output:
我们可以看到 10。当然,我们也可以使用如下的代码来进行测试:
我们接下来选择 Filter 上下文:
如上所示,当我们选择 Filter 上下文时,它需要我们提供一个索引的名称以及一个 sample document。请注意,这个 sample document 将被运用于 Painless 的脚本运算中。我们提供如下的代码:
double height = (float)doc['height'].value/100.0;
double bmi = doc['weight'].value / (height*height);
return bmi > 24 ? true : bmi < 18.4 ? true : false
我们选择 Output:
当我们改变 sample document 里的 weight 及 height 值时,我们可以看到这个 output 值的变。Filter 上下文提供一个 true 或者 false 的结果。
当我们在输入代码时,如果有错误,那么 Painless Lab 会给出错误的信息,比如:
我们接下来选择 Score 上下文:
这种方法是使用 function_score 来计算搜索的得分。你可以参考我之前的文章 “Elasticsearch:Painless scripting 编程实践” 得到更多详细的描述。我们在上面使用如下的代码:
double height = (float)doc['height'].value/100.0;
return doc['weight'].value / (height*height)
我们点击 Output:
我们可以看出来计算出来的结果,也就是用于排序的分数。
以上是关于Kibana:使用 Painless Lab 来测试代码的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch进阶篇 | 记一次kibana执行dsl脚本实战过程
Elasticsearch进阶篇 | 记一次kibana执行dsl脚本实战过程
Elasticsearch进阶篇 | 记一次kibana执行dsl脚本实战过程
Elasticsearch使用 Elasticsearch Painless 脚本以递归方式遍历 JSON 字段