正确使用SolrResponse.getStatus()

时间:2012-10-22 21:13:25

标签: solr solrj

环顾网络上的示例,我猜测getStatus()为成功返回零,并且大多数失败将表现为异常,而不是非零错误代码。

这是真的吗?当getStatus()返回非零时抛出错误是安全/正确的吗? getStatus()返回的非零值是什么,这些值表示什么?

2 个答案:

答案 0 :(得分:2)

我不确定,如果你在solrj中看到一个非零代码,因为在org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpRequestBase, ResponseParser):491中每个非ok状态代码都会抛出SolrException(sorlj 5.3.0)

可能的值是(根据this,Solr 1.x)在org.apache.solr.core.SolrCore中设置的方法postDecorateResponse(Solr 5.2.1,之前它曾是方法setResponseHeaderValues),它将500用于常规例外,或codeSolrException(参见枚举SolrException.ErrorCode):

400 - BAD_REQUEST
401 - UNAUTHORIZED
403 - FORBIDDEN
404 - NOT_FOUND
409 - CONFLICT
415 - UNSUPPORTED_MEDIA_TYPE
500 - SERVER_ERROR
503 - SERVICE_UNAVAILABLE
510 - INVALID_STATE
  0 - UNKNOWN

我最终将每个响应都传递给了一个check-Method,它将抛出异常:

private void checkResponse(SolrResponseBase response){
    if(response.getStatus() != 0){
        throw new RuntimeException(String.format("Solr-Response has error code %s",response.getStatus()));
    }
}

答案 1 :(得分:0)

基于文章Indexing with SolrJ中getStatus的示例用法,我同意你可以假设当getStatus()返回非零值时抛出和错误是安全/正确的。不幸的是,我无法找到任何表明可能从getStatus()返回的非零值的引用。