有人可以解释Elasticsearch的IndexRequest和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);
我还观察到可以在
IndexRequest
上设置文档时间戳,但不能在UpdateRequest
上设置文档时间戳。如果IndexRequest
包装在UpdateRequest
中,并且该文档是新文档,则时间戳将被写入Elasticsearch,但是如果该文档已经存在,则时间戳将被忽略并将其设置为当前时间。是否有任何文档描述这种行为? 最佳答案
IndexRequest
定义了要添加到ElasticSearch中的文档,而不是实际上将执行添加到ElasticSearch中的UpdateRequest
。
注意:UpdateRequest.upsert()
期望即使文档不存在也要使用单独的IndexRequest
。这使您可以在文档已经存在的情况下使用部分文档。