Solr HTTP Api - 响应状态

Solr HTTP Api - response status

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

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

我的第一个问题:状态属性的可能值是什么?它们的含义是什么?我知道值0代表调用成功

我的第二个问题:通常情况下,Solr 会返回 200 代码来表示调用成功。我们能否获得不同于 0status(以防出现错误)并且仍然获得 200 的 http 响应代码?

我用SOLR 4.6

注意:我问这些问题是因为我的 SOLR 没有索引一些集合,尽管他没有出现任何错误并且响应代码是 200!

谢谢

状态代码通常对应于返回的 HTTP 代码,除了 200 返回为 0。这是在 Solr 内部抛出 SolrException 时作为数字代码实现的。当不久前在 solr-user 邮件列表中询问时,following answer from Erik Hatcher was given:

Is there a reference to this status-codes?

只是源代码。 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,并且错误只是由 jetty 返回(如果安装严重失败,或者如果您尝试访问 /solr 以外的内容)。

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

最好尝试了解您的导入失败的原因(并为此使用一个单独的问题,其中包含有关您尝试建立索引的所有相关详细信息,日志中的任何错误说明(您可以调整Web 界面中 Logging 下的日志级别)以及您期望的结果),而不是查看响应中的 status 字段。