我正在使用OpenSearch Java client对存储在AWS提供的OpenSearch中的现有文档实施bulk update操作。BulkRequest
请求对象看起来像这样:
BulkRequest request = new BulkRequest.Builder().operations(o -> o.update(u -> u.index(indexName).id(String.valueOf(id)).document(doc))).build();
openSearchClient.bulk(request);
字符串doc
对象是一个POJO对象,它反映索引中的文档。
public class ProgramSelectionInfoBase implements Serializable {
private static final long serialVersionUID = 6880667215923483985L;
private long id;
private String status35;
// other fields, getters, setters.
}
型
我得到的回复是400 Bad Request
在调试模式下,解析的批量请求看起来与bulk update文档中所描述的不同。它缺少"doc"
父对象,它应该 Package 部分更新的文档:
{ "update" : { "_id" : "361710", "_index" : "program_search" }}
{ "status35": "draft" }. <- doc is missing.
{ "update": { "_index": "movies", "_id": "tt0816711" } }
{ "doc": { "title": "World War Z" } }
型
如果我用单个文档更新请求替换批量更新请求,我将获得成功的结果。解析后的请求结构与文档中的结构相匹配:
UpdateRequest<Object, Object> request = new UpdateRequest.Builder<>().id(String.valueOf(id)).doc(doc).index(indexName).build();
openSearchClient.update(request, Object.class);
{"doc":{"status35":"active"}}
型
**问题:**我是否错误地构建了BulkRequest
对象?这是客户端库的问题吗?
更新我使用的是最新的OpenSearch Java客户端版本
1条答案
按热度按时间vojdkbi01#
在等待响应的过程中,我想出了两个变通方法:
1.当前的需求允许我切换到单个文档更新选项。正如问题中提到的,它成功地工作了。但是,将来很有可能需要更新一组文档,最好使用批量选项。
2.创建类 Package 器。它将有一个
doc
字段,允许在将对象转换为JSON后接收所需的请求结构:字符串