问题标签 [elasticsearch-painless]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1804 浏览

elasticsearch - 无痛脚本弹性搜索:尝试从文档访问值时未定义变量错误

我正在尝试通过遵循官方文档来学习 Elastic Search 中的无痛脚本。(https://www.elastic.co/guide/en/elasticsearch/painless/6.0/painless-examples.html

我正在使用的文档样本:

以下脚本字段查询使用 params._source 访问文档值有效:

相同的查询但使用 doc map 访问值失败:

我得到的错误信息是:

根据文档,这两种方法都应该有效,尤其是第二种方法。我不确定我在这里缺少什么。?

0 投票
1 回答
1195 浏览

elasticsearch - 弹性观察者电子邮件中的日期数学

我想找到 1 天前的日期时间,以便我可以在观察者发送的电子邮件中创建指向 kibana 的链接。使用弹性搜索 5.0.2

我试过下面的手表,但它返回错误

joda DateTime规范中确实存在minusDays

但它在弹性代码库中不存在

这是手表

0 投票
1 回答
823 浏览

elasticsearch - 访问脚本度量聚合中的 _aggs 元素时获取 null_pointer_exception

我有一个每秒的股票价格指数,如下所示,我试图将它们聚合成更大的 5 分钟的价格指数。使用 min/max 很容易聚合高低。然而,打开和关闭更难。我正在尝试使用 Scripted Metric Aggregation,但我得到了一个我无法解释的空指针异常。

我的查询如下所示,尽管我已经从 combine_script 和 reduce_script 中删除了很多内容,以便于阅读。

如果我运行查询,您可以看到它为“open”值输出了一个 Map(带有键 time 和 open),正如您所期望的那样。

但是,如果我尝试访问地图的任何属性(作为一个简单的示例,只是返回params._aggs[0]['open']),我会得到一个空指针异常。我尝试使用它访问它,params._aggs[0].open甚至将其设置为地图,然后访问该地图,Map myMap = params._aggs[0]; return myMap['open'];但我得到了同样的错误。

这是一个问题,因为我需要在 reduce_script 中做一些额外的事情,但似乎无法在没有 NPE 的情况下访问 _aggs 中映射的任何属性。

0 投票
2 回答
7435 浏览

elasticsearch - 如何在 AWS ElasticSearch 的无痛内联脚本中替换没有正则表达式的字符串?

文档中“级别”字段的类型已从“关键字”更改为“短”,我正在尝试重新索引现有数据以便能够在 Kibana 图表中使用它。旧数据包含以下值:“100%”、“错误”或只是空字符串“”。

我只想在新索引中获取整数。我使用内部重新索引 API(添加新行以使代码段更具可读性):

但我收到错误消息:“java.lang.String 无法转换为 java.lang.Number”,因为值末尾有“%”符号。

此外,我没有为 AWS ElasticSearch 启用正则表达式,并且无法按照我的想法进行操作。所以 replaceAll 的变体对我不起作用。例如,如果我有自托管的 ES,它可能是这样的(没有测试过)/(%)?/.matcher(doc['level'].value).replaceAll('$1')::

但从 AWS ES 我看到了这一点:

是否可以在没有正则表达式的情况下用无痛语言替换字符串?

0 投票
1 回答
519 浏览

sorting - Elasticsearch 使用脚本对日期桶进行排序

我对 Elasticsearch 有一个有趣的排序问题。我有以下数据:

上图显示,我有 6 条数据,项 AF,它们分别出现在 -3 和 3 之间的某个时间,此时当前时间为 t0。

我希望在 Elasticsearch 中创建一个排序,它按以下顺序对项目进行排序:

也就是说,未来发生的任何项目在结果中排​​在第一位,并按升序排序,过去发生的任何项目在结果中排​​在第二位,并按降序排列。

到目前为止,我有以下排序:

上面确实将未来的项目放在第一位,过去的项目放在第二位,但它没有按升序对未来的项目进行排序(它对过去的项目进行排序,并且所有项目都按降序排列)。

我不确定我可以编写什么脚本来根据第一个脚本的结果将未来的项目与过去的项目分开排序。

任何帮助将非常感激。

0 投票
1 回答
354 浏览

elasticsearch - Query_string 与 function_score 结合总是给出 1.0 分

当我尝试向我的 Elasticsearch 发出 query_string 请求时,该请求使用 function_score ( script_score) 来操纵其默认分数。但我似乎总是得到一个基础_score1.0

我的模型如下所示:

我对 function_score 脚本的请求如下所示:

我得到的是一个可以准确找到我想要的结果,但只返回 function_score 脚本中的值。内置评分似乎不再起作用。这是我得到的回应:

我的猜测是我的请求正文格式不正确,因为所有分数都只是1.0当我完全取出 function_score 时。

0 投票
2 回答
4204 浏览

elasticsearch - 如何验证 Elasticsearch Painless 脚本?

我们在项目中使用了许多ScriptQueryScriptField,并以无痛的语言为它们提供内联脚本。

我的问题是,我们如何验证这些无痛脚本?换句话说,如何确保它们会编译?

我们今天使用的方法是通过 Kibana 在本地测试它们。然而,这是手动的、容易出错且不可扩展的。我正在寻找一种编程方式或实用程序来验证无痛脚本,以便我可以将其插入 CI/CD 管道。Elasticsearch 在后台使用的编译器是开源的吗?还是有其他方法?

弹性搜索 5.4 版

Kibana 中使用用于 ScriptField 和 ScriptQuery 的无痛脚本的示例查询

0 投票
1 回答
1754 浏览

xml - Elasticsearch无痛将字符串字段(包含XML)转换为变量

我正在尝试解析Request.Body包含 XML 的 Elasticsearch 字符串字段(名为 )。该字段包含一个 SOAP 请求字符串,如下所示:

我的目标是search使用无痛语言提取脚本字段(在 Kibana 中)中的标记值。

我试过这个:

此代码始终返回No match

为了调试,我尝试返回 的值doc['Request.Body'].value,在这个例子中,它只返回1.0而不是我的完整 XML。

我还尝试values使用该代码连接此对象中 List 的值:

现在,该field变量等于 XML 标记值的包含,但是我丢失了 XML 标记,所以我无法使用正则表达式提取我的数据,并且像第一个脚本一样,它总是返回No match

所以我的问题是,如何在我的脚本中的变量中获取我的字段的完整 XML 值?为什么 Elasticsearch 会“解析”我的 XML?

任何帮助,将不胜感激。谢谢。

0 投票
1 回答
2872 浏览

elasticsearch - 将元素附加到 Eslasticsearch 字段

如果类型不匹配,是否可以将一些元素附加到弹性搜索字段?如果我有这样的文件:

我想像这样附加另一个标签字段fe“blue”:

我希望结果类似于:

我知道这个:

用于将字符串附加到另一个字符串

和这个:

用于将另一个元素附加到列表中。那么有什么方法可以将另一个元素附加到字符串字段?谢谢你的任何建议。

0 投票
0 回答
29 浏览

elasticsearch - 注册 Elasticsearch 脚本

有什么方法可以在 ES 中注册脚本吗?

假设我有无痛的脚本,我想将它发送到服务器,然后在代码中调用它。