Solr HTTP Api-响应状态

时间:2018-11-02 13:58:08

标签: solr solr4

通过HTTP Api使用SOLR时,他使用名为responseHeader的对象进行响应,并在其中放置响应的状态

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">13</int>
        <!-- ... -->
    </lst>
    <!-- ... -->
</response>

我的第一个问题:status属性的可能值是什么?它们的含义是什么?我知道值0表示呼叫成功。

我的第二个问题:通常,Solr响应200才成功呼叫。我们能否获得与status不同的0(如果发生错误),并且仍然获得200的http响应代码?

我使用SOLR 4.6

Nb:我问这些问题是因为我的SOLR虽然没有出现任何错误并且响应代码为200,但我没有索引馆藏的全部内容!

谢谢

1 个答案:

答案 0 :(得分:3)

状态代码通常对应于返回的HTTP代码,除了200返回为0之外。当在Solr中向中间抛出SolrException时,该状态代码实现为数字代码。不久前,在solr-user邮件列表中询问此问题时,following answer from Erik Hatcher was given

  
    

是否有对此状态代码的引用?

  
     

只是源代码。 SolrCore#setResponseHeaderValues,主要使用SolrException中指定的代码:

   BAD_REQUEST( 400 ), 
   UNAUTHORIZED( 401 ),  // not currently used 
   FORBIDDEN( 403 ), 
   NOT_FOUND( 404 ), 
   SERVER_ERROR( 500 ), 
   SERVICE_UNAVAILABLE( 503 ), 
   UNKNOWN(0); 

current version of SolrCore can be seen on Github

您可能会假设http错误代码在大多数情况下都会与status值匹配,但是肯定会有例外-例如,如果HTTP请求根本没有到达Solr,并且错误仅由而是使用码头(如果设备严重损坏,或者如果您尝试访问/ solr以外的设备,则可能会出现这种情况)。

在您的示例中,即使将数据导入到集合中时该操作未触发任何操作,该请求也可以很好且正常。如果您的导入查询最终出现在0个文档中,那不是一个错误-并且如果导入已开始(导入通常是异步操作),即使以后的最终结果无效,这仍然是有效且可以的请求

最好尝试理解导入失败的原因(并为此使用一个单独的问题,以及有关如何尝试建立索引,日志中有什么错误的所有相关详细信息(您可以调整日志级别,而不要查看响应中的status字段。