从 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 对象。
我使用 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 对象。