Elasticsearch:批量更新保存在Java String中的多个文档?

好奇的

我可以创建以下字符串,并将其保存在名为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,但是似乎一次只能添加一个文档。如上所述,我在一个字符串中有多个要更新的文档。

有人可以启发我吗?我有一种直觉,认为我可能会以错误的方式做事。

感谢致敬。

维尼思·莫汉(Vineeth Mohan)

以下代码适合您。对于每个文档更新,您需要如下创建一个单独的更新请求,并继续将其添加到批量请求中。一旦批量请求准备就绪,就可以对其进行获取。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章