问题标签 [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.
elasticsearch - 如何比较弹性搜索无痛脚本中的日期?
老实说,我不知道是谁给它命名painless
的,因为它确实不是,而且文档肯定不准确。
首先,我试图与日期进行比较的字段映射为date
.
脚本本身看起来像这样:
我得到的错误是:"caused_by":{"type":"illegal_argument_exception","reason":"Unable to find dynamic method [after] with [1] arguments for class [java.lang.String]."
。
现在我的问题是:为什么地球上的一个场会被映射成date
原来的样子string
?
阅读 API(https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference.html)清楚地表明有Date
一种after
方法。
所以......我在这里做错了什么,或者是怎么回事?另外,如果是这样的话……我真的必须每次都将字符串解析回日期吗?如果是这样怎么办?
elasticsearch - 过滤掉空字段
我正在使用带有无痛语言的 map/reduce 功能来进行一些聚合。
在map_script部分中,我试图过滤掉所有将某个字段设置为null的文档,但我无法这样做。
我已经尝试过containsKey()
,但是即使我查看了基础数据并且绝大多数文档都将此字段设置为null!= null
,但对于每个文档,表达式的计算结果都为true。
我无法解释这一点,但是当我汇总它时,几乎每个文档的该字段的值都被视为 0,而不是 null。但事实并非如此,因为当我查询这个字段时,我看到一堆空值。
有谁知道发生了什么?如何使用无痛过滤掉 map/reduce 聚合中的空值?
elasticsearch - “版本冲突,当前版本与提供的版本不同”在 php 脚本中运行 update_by_query curl 时
我必须更新我的 ES 文档中的一些字段。
我有一个整数“objectID”字段,它是文档所涉及的对象的唯一 ID。
我有一个 String 'objectType' 字段,它是文档所关注的对象类型。
所有文档都描述了对对象的操作,并且 objectType 和 objecID 始终存在于所有文档中。
不幸的是,一些objectType为“post_image”的文档已被索引为“post”。objectID 仍然是唯一且有效的,并且只有一种类型的文档具有错误的 objectType。因此,所有对象至少有另一个具有正确 objectType 和相同唯一 objectID 的文档。
我想使用 update_by_query 在 objectType 为“post”且 objectID 位于 objectType 为“post_image”的任何其他文档中的所有文档上将 objectType 的值更新为“post_image”。
这是我的伪代码脚本:
我是无痛脚本的新手,我不知道如何在我的脚本中放置另一个查询以获取所有“post_image”ID 的列表。我知道我可以将参数传递给脚本,但我也不知道是否或如何使用查询结果。
谢谢!
编辑:
我已经通过使用 Kibana 原始导出提取相关 objectID 的 csv 列表解决了我的部分问题,并且我制作了一个 PHP 脚本来解析每个 objectID 并将其放入我的查询字符串中以用于我的 update_by_query,它只是找到具有匹配 objectID 的所有文档并将 objectType 字段值替换为“post_image”。
我正在使用 php curl 进行这些调用,尽管在我的请求中使用了“冲突”:“继续”,但我遇到了版本冲突问题。我已经在 kibana 的开发控制台中测试了相同的查询,它运行良好,我找不到任何解释为什么它在从 php 运行时不更新我的文档。
这是脚本:
示例响应:
这很奇怪,因为我没有在我的请求中提供任何文档版本。或许它与 upbade_by_query API 的一些自动内部行为有关。
elasticsearch - ElasticSearch 在无痛脚本中舍入浮点值
使用 ElasticSearch 的脚本功能时,我注意到舍入问题。我有以下映射:
和一堆被索引的文件。一个文档的值为159944154.8644
forfoo
字段。当我发送以下查询时:
我得到以下四舍五入的值作为响应:
知道如何解决这个问题吗?提前致谢。
ES 版本:5.3.0
elasticsearch - 使用无痛脚本循环点击
有没有办法在 Elasticsearch 5.3 中使用无痛脚本循环查询结果以计算查询返回的命中之间的差异。
我试图在脚本中的 for 循环中循环结果,但无法在哪个实体上循环,我希望脚本有类似更新 api 的 ctx.payload.hits.hits 可以在 for 循环中使用。
elasticsearch - Painless,Elasticsearch中如何判断一个变量是否为数组
我想删除数组中的一个元素,如果该字段不是数组,什么也不做。
为此,它必须确定该字段是否为数组,或者是否预期异常。如何?
另外,有Painless的详细说明吗?elasticsearch网站上只有入门。
elasticsearch - 是否可以在 logstash scripted_upsert 期间访问事件字段?
是否可以使用 scripted_upsert 访问 elasticsearch logstash 输出脚本中的事件字段?
如果我使用这样的脚本,它不会更新文档。但是,如果我设置ctx._source.name
为静态的。例如。
script => 'ctx._source.name = "something"'
它按预期工作。和 upserts 文件。
regex - 如何在 Elasticsearch 5x 的 Painless 语法中编译正则表达式
我需要编译由 Painless 中的参数定义的正则表达式。
我最初的假设是我可以做类似于以下的事情:
但是,我收到以下错误:
也许还有另一种方法可以在 Painless 中将字符串转换为 Pattern 对象?
elasticsearch - Elasticsearch无痛,如何判断一个字段的数据类型
在es5.5中,如何判断一个字段是否为数字?
elasticsearch - elasticsearch 无痛访问动态命名字段
我正在尝试在弹性搜索中平均一个字段,
这有效,
映射在哪里,
我想要做的是访问这里临时命名为 bing..bong 和 bong ..bing 的字段。该字段是动态映射的,有什么方法可以访问相同的吗?