【问题标题】:Solr HTTP Api - response statusSolr HTTP Api - 响应状态
【发布时间】:2018-11-02 13:58:08
【问题描述】:

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

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

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

我的第二个问题:通常,Solr 会以 200 代码响应成功调用。我们可以得到一个不同于0status(在发生错误的情况下)并且仍然得到200 的http 响应代码吗?

我用SOLR 4.6

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

谢谢

【问题讨论】:

    标签: solr solr4


    【解决方案1】:

    状态代码通常对应于返回的 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,而错误只是由 jetty 返回(如果安装严重失败,或者您可能尝试访问 /solr 以外的其他内容)。

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

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

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 2018-04-21
      • 2014-01-20
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多