从 BulkRequest 捕获特定的 Elasticsearch 异常

Catch a specific Elasticsearch exception from a BulkRequest

我使用 Java 将一些带有 BulkRequest 的文档编入 Elasticsearch 1.4.2 中。

其中一些文档只需要在它们不在索引中时编写,所以我这样设置 CREATE-opType:

indexRequestBuilder.opType(IndexRequest.OpType.CREATE)

现在已经在索引中的文档在 BulkResponse 中失败了。

错误信息bulkItemResponse.getFailureMessage()

DocumentAlreadyExistsException[...]

我想忽略此 class 异常,但重试为所有其他类型的异常编写文档。

那么我怎样才能只捕捉到 DocumentAlreadyExistsException

我可以用 bulkItemResponse.getFailure() 得到 Failure,但我在错误消息旁边找不到任何关于异常类型的信息。

我可以在错误消息中查找异常名称,但这对于新的 Elasticsearch 版本来说可能相当脆弱:

if(bulkItemResponse.getFailureMessage().startsWith("DocumentAlreadyExistsException[")

有没有更好的方法?

这不可能。批量请求实际上是在服务器端而不是客户端执行的。因此,它所能做的就是发回堆栈跟踪,而不是 Exception 对象。