我目前正在使用Elasticsearch V2.3.1。我想在Java中使用以下的Elasticsearch查询。
POST /twitter/_update_by_query
{
"script": {
"inline": "ctx._source.List = [‘Item 1’,’Item 2’]”
},
"query": {
"term": {
"user": "kimchy"
}
}
}
上述查询搜索名为“kimchy”的“user”,并使用给定的值更新“List”字段。此查询同时更新多个文档。
我在这里阅读了关于Java的Update API:https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.3/java-docs-update.html,但未找到我想要的内容。 Java的Update API仅介绍如何一次更新单个文档。是否有任何方法可以更新多个文档?如果我缺少明显的信息,请原谅。感谢您的时间。更新: 我尝试了以下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 script = new Script("ctx._source.List = [\"Item 1\",\"Item 2\"]");
//termQuery is not recognised by the program
BulkIndexByScrollResponse r = ubqrb.source("twitter").script(script)
.filter(termQuery("user", "kimchy")).execute().get();
所以我按照上面的方式编辑了Java程序,但是Java没有识别termQuery。请问我在这里做错了什么?谢谢。
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
。 - ValclientBuilder
是什么类型以及如何获取它吗?非常感谢。 - Adam Libuša5.5.0
或类似版本的人提供一个提示:插件必须作为PreBuiltTransportClient
构造函数的第二个参数添加。 - Adam Libuša