这是我第一次尝试无痛脚本,但是几乎每个示例都使用“state”对象,这在我的版本中不可用。
即
"aggs": {
"terms": {
"scripted_metric": {
"init_script": "state.id_map = [:]; state.sum = 0.0;",
"map_script": """
def id = doc['record_id.ID'].value;
if (!state.id_map.containsKey(id)) {
state.id_map[id] = true;
state.sum += doc['VAL'].value;
}
""",
"combine_script": """
def sum = state.sum;
def stats = [:];
stats.sum = sum;
return stats
""",
"reduce_script": "return states"
}
}
}
导致:变量[state]未定义。
省略它也没有帮助
"init_script": "Map id_map = new HashMap(); double sum = 0.0;",
"map_script": """
def id = doc['record_id.ID'].value;
if (!id_map.containsKey(id)) {
id_map[id] = true;
sum += doc['VAL'].value;
}
""",
结果为:“变量[id_map]未定义。”在map_script部分
早期版本的替代方法是什么?
您上面的脚本在6.4版及更高版本中运行良好。
由于您正在运行ES 5.x,因此需要稍微更改语法:
状态
替换为params._agg
状态
替换为params._aggs
像这样:
"aggs": {
"terms": {
"scripted_metric": {
"init_script": "params._agg.id_map = [:]; params._agg.sum = 0.0;",
"map_script": """
def id = doc['record_id.ID'].value;
if (!params._agg.id_map.containsKey(id)) {
params._agg.id_map[id] = true;
params._agg.sum += doc['VAL'].value;
}
""",
"combine_script": """
def sum = params._agg.sum;
def stats = [:];
stats.sum = sum;
return stats
""",
"reduce_script": "return params._aggs"
}
}
}
我正在设计多租户SaaS解决方案。我读过多租户SaaS数据库租赁模式的文章,对我来说,每个租户都有数据库的多租户应用似乎是最好的选择。它看起来非常有吸引力,因为它为所有现有数据库提供了数据库管理工具。可以一次更新所有租户的数据库模式。但这是唯一的选择吗?我没有找到任何AWS或谷歌云替代弹性池。有吗? 也许有更好的解决方案为每个租户提供单独的数据库?例如,使用docker/kubernates。 谢
我是ES的新手,我正在尝试使用聚合编写搜索查询。 在写同样的东西时,我面临着无痛脚本的问题。 哪里可以得到完整的无痛脚本文档,用于弹性搜索?
当我不向其添加某些脚本但它失败并返回时,函数脚本查询工作正常 工作查询: 查询返回错误的次数最多: 任何形式的帮助都是非常感激的。 [在此处输入图像描述][1] 谢谢// [1]:https://i.stack.imgur.com/8LMRj.png**strong文本**
想知道是否有人知道为什么这个查询更新运行良好,但即使任务运行到完成并声称所有记录都已更新,也不会删除任何内容?我可以使用相同的语法删除所有人员对象,而不会出现任何问题。为什么 ES 不删除对象属性? 现在,如果我使用从上述调用返回的ID观看任务 GET/_ tasks/qle uj 8 jqqgopfgse ZL 7 u 9 q:1776664 我得到了这个(简短的版本),声称所有记录都已更新。然
我在elasticsearch中创建了一个观察器,当我们在索引中10分钟没有新条目或事件时,它会报告,这可以通过查看条目中的源字段来进一步划分。 我只得到了索引的最后10分钟,并查看了桶中不存在哪个源。 为此,我首先创建我们收到的所有源类型的列表,然后从返回的存储桶键创建一个列表。然后,我想比较列表以查看缺少哪个列表,然后将其传递到消息中。 我在for循环中遇到了一个通用错误。任何反馈对弹性和无痛
我目前正在使用Elastic search 5.2,并尝试使用以下rest api执行upsert操作: > http://ip:9200/indexname/typename/id/_update Json有效载荷: } 此api执行以下操作: 1.)如果在弹性搜索中没有找到索引,则使用upsert字段中提供的json创建索引。< br> 2。)如果索引存在,那么它通过运行文档中提供的简单脚本来