Elasticsearch:IndexRequest和UpdateRequest之间的区别

时间:2015-11-16 19:27:44

标签: java elasticsearch

有人可以解释Elasticsearch的{​​{3}}和IndexRequest之间的区别吗? UpdateRequest(类级别)的javadoc为空,我找不到任何文档。

我发现一些代码在将IndexRequest包装到UpdateRequest之前将其添加到批量操作中,但我发现BulkRequestBuilder不需要UpdateRequest和可以直接拿IndexRequest,这样或那样做有什么好处吗?

IndexRequest indexRequest = new IndexRequest(indexName, typeName, docId)
    .source(doc);
UpdateRequest updateRequest = new UpdateRequest(indexName, typeName, docId)
    .doc(doc)
    .upsert(indexRequest);

我还观察到您可以在IndexRequest上设置文档时间戳,但不能在UpdateRequest上设置。如果IndexRequest包含在UpdateRequest中,并且文档是新文档,则时间戳将写入Elasticsearch,但如果文档已存在,则时间戳将被忽略,并且设置为当前时间。是否有任何描述此行为的文档?

1 个答案:

答案 0 :(得分:0)

IndexRequest定义了要添加到ElasticSearch中的文档,而不是UpdateRequest实际执行添加到ElasticSearch中。

注意:UpdateRequest.upsert()期望即使文档不存在也要使用单独的IndexRequest。这样,您就可以在文档已经存在的情况下使用部分文档。