Solr HTTP Api - 响应状态

Solr HTTP Api - response status

提问人:beta-developper 提问时间:11/2/2018 更新时间:11/2/2018 访问量:4920

问:

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

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

我的第一个问题:status 属性的可能值是什么?它们的含义是什么?我知道该值意味着调用成功。0

我的第二个问题:通常,Solr 会以 200 代码响应成功呼叫。我们是否可以得到一个不同的(如果出现错误)并且仍然得到 200 的 http 响应代码?status0

我使用SOLR 4.6

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

谢谢

索尔索尔 4

评论


答:

4赞 MatsLindh 11/2/2018 #1

状态代码通常对应于返回的 HTTP 代码,但 200 返回为 0。当SolrException在Solr内部抛出SolrException时,这将作为数字代码实现。不久前,当 solr-user 邮件列表上有人问这个问题时,Erik Hatcher 给出了以下答案

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

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

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

SolrCore的当前版本可以在Github上看到

您可能可以假设 http 错误代码在大多数情况下都会与该值匹配,但肯定有例外 - 例如,如果 HTTP 请求根本无法到达 Solr,并且错误只是由 jetty 返回(如果安装严重无聊,或者可能如果您尝试访问 /solr 以外的内容)。status

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

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