我有一个银行帐户数据集,其中包含字段account number,state,firstname,lastname.iam,编写以下命令以更新从州CA到antony的客户的所有firstname记录。
curl -XPOST 'localhost:9200/bank/_update_by_query?pretty' -d '{
"query" : {
"term" : {"state":"CA"}
},
"script" : {
"inline" : "ctx._source.firstname = a",
"params" : {
"a" : "antony"
},
"lang" : "groovy"
}
}'
结果:
{ "把" :3, " TIMED_OUT" :假的, "总" :0, "更新" :0, "批次" :0, " version_conflicts" :0, " noops" :0, "重试" :0, "故障" :[] }
所有记录都没有更新。
提前感谢。
答案 0 :(得分:1)
由于您的state
字段为analyzed
(默认情况下),您需要使用match
查询而不是term
字段(或保留term
}查询但小写CA
到ca
)
curl -XPOST 'localhost:9200/bank/_update_by_query?pretty' -d '{
"query" : {
"match" : {"state":"CA"}
},
"script" : {
"inline" : "ctx._source.firstname = a",
"params" : {
"a" : "antony"
},
"lang" : "groovy"
}
}'
答案 1 :(得分:0)
如果有人只想通过Kibana做到这一点,只需使用此脚本作为示例在Kibana中添加Dev Tools redactor,就可以了:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
<classpathentry exported="true" kind="lib" path="lib/commons-logging-1.2.jar"/>
</classpath>
答案 2 :(得分:-2)
如果要更新已归档状态的映射,则首先需要删除映射并在2.x中重新创建,因为更新它时不会在Es 2.2中正确更新映射。
根据Elatic搜索文档: 我们可以更新地图以添加新字段,但我们无法将现有字段从已分析更改为not_analyzed。
首先,您可以备份映射。然后使用以下链接删除它。 curl -XDELETE'http://host.sachin.com:9999/ecmviews/?pretty'
删除映射后,您可以使用相同的备份映射并更新状态字段,如下所示: “州”:{ “type”:“string”, “index”:“not_analyzed” },
并使用以下命令更新映射json: curl -XPUT'http://host.sachin.com:9999/ecmviews' - ''{ 你的映射json没有curl backets } 。它将使用ack更新映射:true作为响应。 更新映射后,您可以尝试查询。它会起作用。