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 字段

Elasticsearch Painless script编程

Elasticsearch painless脚本中使用java自定义类函数