2016-08-21 71 views
1

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

回答

0

以下代碼將解決問題。

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

相關問題