Elasticsearch:IndexRequest和UpdateRequest之间的区别

Mik*_*der 8 java elasticsearch

有人可以解释IndexRequest和Elasticsearch 的UpdateRequest之间的区别吗?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);
Run Code Online (Sandbox Code Playgroud)

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

nak*_*nak 1

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

注意:如果文档不存在,则期望使用UpdateRequest.upsert()单独的文件。IndexRequest这使您能够在文档已存在的情况下使用部分文档。