我可以创建以下字符串,并将其保存在名为update的Java String对象中。
{ "update":{ "_index":"myindex", "_type":"order", "_id":"1"} }
{ "doc":{"field1" : "aaa", "field2" : "value2" }}
{ "update":{ "_index":"myindex", "_type":"order", "_id":"2"} }
{ "doc":{"field1" : "bbb", "field2" : "value2" }}
{ "update":{ "_index":"myindex", "_type":"order", "_id":"3"} }
{ "doc":{"field1" : "ccc", "field2" : "value2" }}
现在,我想在Java程序中进行批量更新:
Client client = getClient(); //TransportClient
BulkRequestBuilder bulkRequest = client.prepareBulk();
//?? how to attach updates variable to bulkRequest?
BulkResponse bulkResponse = bulkRequest.execute().actionGet();
我无法找到一种在执行之前将上述更新变量附加到bulkRequest的方法。
我注意到我能够将UpdateRequest对象添加到bulkRequest,但是似乎一次只能添加一个文档。如上所述,我在一个字符串中有多个要更新的文档。
有人可以启发我吗?我有一种直觉,认为我可能会以错误的方式做事。
感谢致敬。
以下代码适合您。对于每个文档更新,您需要如下创建一个单独的更新请求,并继续将其添加到批量请求中。一旦批量请求准备就绪,就可以对其进行获取。
JSONObject obj = new JSONObject();
obj.put("field1" , "value1");
obj.put("field2" , "value2");
UpdateRequest updateRequest = new UpdateRequest(index, indexType, id1).doc(obj.toString());
BulkRequestBuilder bulkRequest = client.prepareBulk();
bulkRequest.add(updateRequest);
obj = new JSONObject();
obj.put("fieldX" , "value1");
obj.put("fieldY" , "value2");
updateRequest = new UpdateRequest(index, indexType, id2).doc(obj.toString());
bulkRequest = client.prepareBulk();
bulkRequest.add(updateRequest);
bulkRequest.execute().actionGet();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句