将地图复制到弹性搜索的更新文档请求中



我想在Elastic Search的Java高级REST客户端API中将一组来自HashMap的键值对添加到UpdateRequest函数的请求主体中。

我可以成功地循环HashMap并提取键和值。如何以干净高效的方式将这些添加到生成器中?

更新:新日期((,动物:鳄鱼

代码是一个占位符,表示我希望通过HashMap中的真实数据实现的目标。

这是我在Elastic Search中使用的文档。我们使用的是7.5.2版本。

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-update.html

public void updateDocument(@PathParam("index_name") String index_name,
@PathParam("document_id") String document_id, HashMap<String, String> columnValues) throws IOException {
RestHighLevelClient client = createHighLevelRestClient();
Set<String> keys = columnValues.keySet();
for (String key : keys) {
System.out.println(key);
System.out.println(columnValues.get(key));
}
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.timeField("updated", new Date());
builder.field("animal", "crocodile");
}
builder.endObject();
UpdateRequest request = new UpdateRequest(
index_name, document_id);
request.docAsUpsert(true).doc(builder);
UpdateResponse updateResponse = client.update(
request, RequestOptions.DEFAULT);
System.out.println(updateResponse);
client.close();

这很有效。。。

XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
for (String key : keys) {
System.out.println(key);
System.out.println(columnValues.get(key));
builder.field(key, columnValues.get(key));
}
builder.endObject();

最新更新