Elasticsearch Java api - 使用bulkProcessor对文档进行部分更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch Java api - 使用bulkProcessor对文档进行部分更新相关的知识,希望对你有一定的参考价值。
我正在使用Elasticsearch Java api的BulkProcessor在索引中插入/更新/删除文档。以下方法适用于插入和删除
bulkProcessor.add(indexRequest(index).type(type).id(id).source(document))
bulkProcessor.add(deleteRequest(index).type(type).id(id));
可以使用indexRequest
来更新索引中的部分文档。比如在elasticsearch索引中,我有一个文档
{
"_id": "abcdefghijk",
"id": "1",
"title": "Harry Potter",
"description": "Description for Harry Potter",
"price": 10,
"category": "Book"
}
是否有可能只更新文档中的price属性,比如我想使用{"price":15}
或api中的任何其他方法将价格更改为indexRequest
答案
以下代码将解决问题。
final BulkRequestBuilder bulkRequest = esClient.prepareBulk();
//start loop for multiple products
final XContentBuilder contentBuilder = XContentFactory.jsonBuilder();
try {
contentBuilder.startObject();
contentBuilder.field("price", 20);
contentBuilder.endObject();
} catch (final IOException ex) {
ex.printStackTrace();
}
bulkRequest.add(esClient.prepareUpdate(index, type,_id).setDetectNoop(false)
.setDoc(contentBuilder));
//end loop
BulkResponse bulkResponse = bulkRequest.execute().actionGet();
另一答案
bulkProcessor.add(new UpdateRequest(indexName, type, docId).doc(document).upsert(document));
如果文档id不存在,则upsert元素的内容将用于索引新文档,否则,如果已存在,则用于更新文档的doc元素的内容。
以上是关于Elasticsearch Java api - 使用bulkProcessor对文档进行部分更新的主要内容,如果未能解决你的问题,请参考以下文章