在 Java 中执行 ElasticSearch 更新时如何确保现有值不被覆盖?
How can I make sure that an existing value is not overwritten when doing an ElasticSearch update in Java?
我在索引 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
中未指定的现有值?
这似乎有效:
final UpdateRequest request = new UpdateRequest(myIndex, myId);
...
request.fetchSource(new FetchSourceContext(true,
new String[]{"someExistingField"}, Strings.EMPTY_ARRAY));
...
我在索引 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
中未指定的现有值?
这似乎有效:
final UpdateRequest request = new UpdateRequest(myIndex, myId);
...
request.fetchSource(new FetchSourceContext(true,
new String[]{"someExistingField"}, Strings.EMPTY_ARRAY));
...