我正在使用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
答案 0 :(得分:1)
以下代码将解决问题。
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();
答案 1 :(得分:0)
bulkProcessor.add(new UpdateRequest(indexName, type, docId).doc(document).upsert(document));
如果文档ID不存在,则将使用upsert元素的内容来索引新文档;否则,将使用upsert元素的内容来更新文档。