Elasticsearch Java API - 使用BulkProcessor部分更新文档

问题描述:

我正在使用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" 
} 

是否有可能在文件中只更新价格属性,说我想用indexRequest或与API的任何其他方法来改变价格{"price":15}

以下代码将解决问题。

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(); 
+0

这是bulkRequest,但我认为它不可能使用bulkProcessor使用indexRequest – Deepak