问题标签 [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 回答
371 浏览

elasticsearch - Elasticsearch 更新脚本 - 'noop' 刷新整个脚本

我想使用内联无痛脚本在单个更新请求中更新文档中的 2 个字段:

问题是 - 如果满足条件并且ctx.op = 'noop'脚本的第一部分 ( ctx._source.counter1 ++ ;) 也没有被执行。

你会如何建议我应该这样做?
我可以将操作拆分为 2 个更新请求,这将使我的数据库调用加倍(但也许“noop”调用非常快)。
我还尝试交换脚本的 2 个部分(首先是条件,其次是增量) - 但随后出现编译错误:

有任何想法吗?谢谢

0 投票
1 回答
231 浏览

elasticsearch - ES:将当前文档保存到子字段中作为历史修订

我正在尝试使用脚本在同一文档中实现存储旧版本:painless

回应是

那么我怎样才能使这项工作呢?

0 投票
1 回答
1865 浏览

elasticsearch - 在 Elasticsearch 中无痛排序

我在一个 groovy 脚本中有以下行,我正试图将其重写为无痛 -

我得到的编译错误是“未定义变量 [a]”。

看起来 painless 支持 Java 中的 Collections.sort 方法,所以我尝试了 -

但这也有一个编译错误 - “未知调用 [sort] 与 [3] 类型 [Collections] 的参数。”

是否可以使用 lambda 进行无痛排序?如果是这样,那么语法是什么?此外,有没有比https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference.html更好的无痛参考?

谢谢,尼克

0 投票
1 回答
759 浏览

elasticsearch - 如何将“updatedAt”时间戳添加到弹性搜索文档

我想确保某个 doc_type 的所有文档都有一个“updatedAt”时间戳(ISO 8601),只要文档更新就会更新。它需要是服务器端时间戳,因为我不知道我是否可以相信所有客户端时间都是同步的。

我使用摄取管道添加“createdAt”时间戳,但似乎不支持使用更新 API 的管道。

我尝试使用更新脚本(使用新可用的 'ctx._now' 值),但无法解析为 ISO 8601 工作。此外,我不确定更新脚本是最易于维护的方式,因为每种更新类型都需要自定义脚本。

0 投票
1 回答
1035 浏览

php - Elasticsearch:使用无痛脚本获取对象索引

我有一个嵌套类型,我需要获取特定对象的索引来执行更新:

到目前为止,我已经_update在 Painless 脚本中创建了一个几乎可以完成这项工作的语句,但我很难找到匹配项:

在这里,links[i].note_link_id == note_link_id不匹配。

有任何想法吗?

0 投票
1 回答
1528 浏览

elasticsearch - 使用无痛脚本从弹性搜索日期中删除日期

我有这种格式的日期,November 17th 2016, 12:54:29.000"17只需要使用无痛脚本即可。另外,如果有人可以为我提供有关日期格式的无痛脚本教程的链接。

0 投票
1 回答
1281 浏览

elasticsearch - 将数组与 Painless 进行比较

Painless 中是否有一种快速的方法可以将一个数组的值与另一个数组的值进行比较?我试图避免一个长循环语句。我正在寻找可以评估为以下两项的内容:

0 投票
2 回答
8483 浏览

elasticsearch - 用于计算数组长度的脚本字段

我有以下文件:

我正在尝试运行一个update_by_query将添加一个名为“like_count”的字段,其中包含数组项的数量likes.data

重要的是要知道并非我的所有文档都有likes.data对象。

我试过这个:

但收到此错误消息:

0 投票
1 回答
350 浏览

c# - ElasticSearch 从指定术语中查找具有不同嵌套列表元素的索引对象

假设我们有一个(嵌套)分数列表的学生,如下所示:

如何使用NEST (或简单查询)编写ElasticSearch查询以获取至少有 2 个不同分数(从 7 到 10)的所有学生。

因此,例如,如果一个学生的分数是 {2,7,10} 或 {8,10},他应该在我们的结果中,而一个学生的分数是 {10,6,5} 或 {8,8} 或 {2 , 7} 不应该出现在我们的结果中。

我想出的是:

但是 ElasticSearch 似乎不允许TERMS查询的结合(返回 0 个命中)。即使它确实有效,我仍然需要更优雅的东西,因为如果我们有超过 4 个允许的值,这将变得很痛苦。

更新

我尝试了以下脚本,但也得到了 0 个结果:

0 投票
1 回答
1388 浏览

date - 如何在 Elasticsearch 中的嵌套和非嵌套日期之间执行日期算术?

考虑以下 Elasticsearch (v5.4) 对象(“奖励”文档类型):

award.date两者的映射类型award.recipient.date_of_birth都是“日期”。

我想执行范围聚合以获取该奖项获得者的年龄范围列表(“18 岁以下”、“18-24 岁”、“24-30 岁”、“30 岁以上”),在他们的时间奖。我尝试了以下聚合查询:

问题 1

但是由于script部分中的日期比较,我收到以下错误:

DateTime对象即award.date场,对象MutableDateTimeaward.recipient.date_of_birth场。我试过做类似的事情(尽管 Joda 文档声称这个方法是从父类继承的,doc['recipient.date_of_birth'].date.toDateTime()但它不起作用)。MutableDateTime我也尝试过进一步做这样的事情:

可悲的是,这也行不通:(

问题 2

我注意到如果我这样做:

我得到1970doc_count结果恰好等于 ES 中的文档总数。这使我相信访问嵌套对象之外的属性根本不起作用,并给了我一些默认值,例如纪元日期时间。如果我做相反的事情(聚合出生日期而不嵌套),我会得到所有出生日期完全相同的东西(1970,纪元日期时间)。那么如何比较这两个日期呢?

我在这里绞尽脑汁,我觉得有一些聪明的解决方案超出了我目前在 Elasticsearch 方面的专业知识。帮助!

如果你想为此建立一个快速的环境来帮助我,这里有一些 curl 的好处:

这应该会给你一个“joelinux”索引,其中包含两个“获奖”文档来测试这一点(“James Conroy”和“Martin McNealy”)。提前致谢!