如何确保在 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 更新时不会覆盖现有值?的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch是否有架构?

Java中静态类型检查是如何进行的

在Java中遍历HashMap时如何确保键的顺序不能改变? [复制]

在 Spring 集成中,如何仅使用 java 注释配置消息网关,并确保网关看到回复

SpringBoot-spring-data-elasticsearch7.12.0

如何确保Java线程安全?