如何确保在 Java 中进行 ElasticSearch 更新时不会覆盖现有值?
Posted
技术标签:
【中文标题】如何确保在 Java 中进行 ElasticSearch 更新时不会覆盖现有值?【英文标题】:How can I make sure that an existing value is not overwritten when doing an ElasticSearch update in Java? 【发布时间】:2022-01-19 15:17:33 【问题描述】:我在索引 myIndex
中有一个 ID 为 myId
的 ElasticSearch 条目。此条目的字段为 someExistingField
。
现在我想更新这个条目。由于技术原因,更新请求不包含someExistingField
数据。
我想确保在本次更新的范围内
仅更改更新请求中指定的那些值,并且 更新请求中未提及的值不会更改。目前我正在使用此代码:
final Map<String, Object> esDocument = ...;
final UpdateRequest request = new UpdateRequest(myIndex, myId);
request.doc(esDocument, XContentType.JSON);
esClient.update(request, RequestOptions.DEFAULT);
如何更改此代码以使其不覆盖request
中未指定的现有值?
【问题讨论】:
【参考方案1】:这似乎有效:
final UpdateRequest request = new UpdateRequest(myIndex, myId);
...
request.fetchSource(new FetchSourceContext(true,
new String[]"someExistingField", Strings.EMPTY_ARRAY));
...
【讨论】:
以上是关于如何确保在 Java 中进行 ElasticSearch 更新时不会覆盖现有值?的主要内容,如果未能解决你的问题,请参考以下文章
在Java中遍历HashMap时如何确保键的顺序不能改变? [复制]
在 Spring 集成中,如何仅使用 java 注释配置消息网关,并确保网关看到回复