1

我正在使用 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":15}使用indexRequest或使用 api 中的任何其他方法

4

2 回答 2

1
bulkProcessor.add(new UpdateRequest(indexName, type, docId).doc(document).upsert(document));

如果文档 id 不存在,则 upsert 元素的内容将用于索引新文档,否则如果已存在,则 doc 元素的内容用于更新文档。

于 2018-09-02T11:57:34.127 回答
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();
于 2016-08-22T08:58:25.803 回答