我抓取了一些文档并在elasticsearch中创建了一个索引。我使用sense来查询:
这是我在elasticsearch中的查询:
POST /index/_update_by_query
{
"script": {
"inline": "ctx._source.remove(\"home\")"
},
"query": {
"wildcard": {
"url": {
"value": "http://search.com/*"
}
}
}
}
这是我的Java程序:
Client client = TransportClient.builder().addPlugin(ReindexPlugin.class)
.build().addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName("127.0.0.1"), 9300));
UpdateByQueryRequestBuilder ubqrb = UpdateByQueryAction.INSTANCE
.newRequestBuilder(client);
Script script1 = new Script("ctx._source.remove" +FieldName);
BulkIndexByScrollResponse r = ubqrb.source("index").script(script1)
.filter(wildcardQuery("url", patternvalue)).get();
FieldName(其中home保存为字符串)是我要从文档中删除的字段的名称。 patternvalue是模式" http://search.com/ *"被储存了。当我运行这个Java程序时,它不会从我的文档中删除主页。它在我的文档中添加了一个名为remove的新字段。我可能会遗漏一些东西。任何帮助将不胜感激
答案 0 :(得分:0)
如果FieldName是字符串home
,则表达式"ctx._source.remove" +FieldName
将等于"ctx._source.removehome"
,这不是正确的脚本。该行的正确代码是:
Script script1 = new Script("ctx._source.remove(\"" + FieldName + "\")");
这样脚本将是:
ctx._source.remove("home")
这和你在json中写的相同:
"inline": "ctx._source.remove(\"home\")"
(\"
在json只是"
在json语法中转义了)