【问题标题】:Keep getting a "missing content stream" error using php and curl to post XML使用 php 和 curl 发布 XML 时不断收到“缺少内容流”错误
【发布时间】:2023-03-12 22:24:01
【问题描述】:

当 wiki 文章的内容发生变化时,我试图让 php 发布到 solr 服务器。这是 SOLR 版本 4.4.0、PHP 5.3.3、CURL 7.19.7。

有人有什么想法吗? 谢谢, 皮特。

这是 PHP 代码

$header = array("Content-Type: text/xml; charset=UTF-8");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://wiki.XXXXX.com:8080/solr/update?wt=json&indent=true");        
curl_setopt($ch, CURLOPT_HEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,  $encoded);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
$result = curl_exec($ch);

这是错误

DEBUG - 2014-05-07 09:18:22.028; org.apache.solr.update.processor.LogUpdateProcessor; PRE_UPDATE FINISH {indent=true&wt=json&<add><doc>
<field type='string'+name%3D'segment'>100000000</field>%0a<field+type%3D'string'+name%3D'digest'>ed226ec873a622e54e26c0eb31f18e2f</field>%0a<field+type%3D'float'+name%3D'boost'>0</field></field>%0a<field+type%3D'text_general'+name%3D'content'>*+goofball%0a*+goofy</field>%0a<field+type%3D'text_general'+name%3D'title'>SolrIndexArticle+Test</field>%0a<field+type%3D'string'+name%3D'author'>Polsen</field>%0a<field+type%3D'long'+name%3D'_version_'></field>%0a</doc></add>%0a<commit+waitFlush%3D'false'+waitSearcher%3D'false'/>%0a}
INFO  - 2014-05-07 09:18:22.028; org.apache.solr.update.processor.LogUpdateProcessor; [collection1] webapp=/solr path=/update params={indent=true&wt=json&<add><doc>
<field type='string'+name%3D'segment'>100000000</field>%0a<field+type%3D'string'+name%3D'digest'>ed226ec873a622e54e26c0eb31f18e2f</field>%0a<field+type%3D'float'+name%3D'boost'>0</field>%0a<field+type%3D'url'+name%3D'host'>HOST URL</field>%0a<field+type%3D'url'+name%3D'url'>URL ID</field>%0a<field+type%3D'url'+name%3D'id'>URL ID</field>%0a<field+type%3D'text_general'+name%3D'content'>*+goofball%0a*+goofy</field>%0a<field+type%3D'text_general'+name%3D'title'>SolrIndexArticle+Test</field>%0a<field+type%3D'string'+name%3D'author'>Polsen</field>%0a<field+type%3D'long'+name%3D'_version_'></field>%0a</doc></add>%0a<commit+waitFlush%3D'false'+waitSearcher%3D'false'/>%0a} {} 0 12
ERROR - 2014-05-07 09:18:22.029; org.apache.solr.common.SolrException; org.apache.solr.common.SolrException: <strong>missing content stream</strong>
    at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:69)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1904)
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:659)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:362)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

这是 PHP 错误日志输出:

==> /data/php_errors.log

[07-May-2014 09:18:22] curr exited okay
[07-May-2014 09:18:22] Data returned...
[07-May-2014 09:18:22] ------------------------------------
[07-May-2014 09:18:22] HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
Content-Type: text/plain;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 07 May 2014 13:18:22 GMT
Connection: close

{
  "responseHeader":{
    "status":400,
    "QTime":12},
  "error":{
    "msg":"missing content stream",
    "code":400}}

【问题讨论】:

    标签: php xml curl solr


    【解决方案1】:

    虽然之前在 cmets 中已经给出了这个解决方案,但在这里我想在单独的答案中强调它。

    Solr 显然会在提供文件而不提交的请求上返回“丢失的内容流”。返回的错误令人困惑,因为实际上给出了内容文件。

    我正在分析使用 Solarium 客户端执行 extractOnly 请求的类似案例。在尝试切换客户端适配器并确保请求包含所选文件后,我终于成功添加了$request-&gt;setCommit( true );

    【讨论】:

      【解决方案2】:

      到 Solr 的帖子中“缺少内容流”意味着您向 Solr 发送了一个空文档或根本没有文档。在这种情况下,您似乎正在尝试更新 Solr 中的某些内容 - 但是根据此错误,您没有传递任何内容。我也没有在您的代码中看到任何包含或指向要更新的文档的内容 -

      这些先前的讨论可能会有所帮助:

      What is the significance of the "missing content stream" exception in SolrCore?

      【讨论】:

      • 我将文档内容作为 PUT 的一部分发送。您可以在服务器的错误响应中看到内容。还是我误解了这些数据的实际含义?我认为应该索引的是文档的内容。服务器上没有要索引的物理文档。
      • 您可以将内容添加到您的代码清单中吗?尝试从错误消息中解析出来更加困难,而且查看您发布的确切内容更有帮助。我在您返回的错误消息中看不到任何 或 但这可能是只是因为它在错误日志中被删除了。
      • &lt;add&gt; &lt;doc&gt; &lt;field name='digest'&gt;1d0166376a3238ad46826ab1ea8ed186&lt;/field&gt; &lt;field name='url'&gt;http://wiki.XXXX.com/sandbox/index.php/SolrIndexArticle_Test&lt;/field&gt; &lt;field name='id'&gt;http://wiki.XXXXX.com/sandbox/index.php/SolrIndexArticle_Test&lt;/field&gt; &lt;field name='content'&gt;* goofedball * goofball * peanut butter * flimflam * this is a change * gibberish * new&lt;/field&gt; &lt;field name='title'&gt;SolrIndexArticle Test&lt;/field&gt; &lt;field name='author'&gt;Polsen&lt;/field&gt; &lt;/doc&gt; &lt;/add&gt; &lt;commit waitFlush='false' waitSearcher='false'/&gt;
      • 我在我的网址中添加了“commit=true”参数,现在我不再收到“缺少内容流”错误,但内容似乎仍然不可搜索。这是我得到的回复:{ "responseHeader":{ "status":0, "QTime":31}}
      • 您使用的是什么版本的 Solr? waitFlush 已被弃用。 wiki.apache.org/solr/UpdateXmlMessages 。如果您想立即搜索此内容,我会尝试软提交。
      猜你喜欢
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2022-01-26
      • 2017-10-14
      • 2014-04-28
      • 2018-06-13
      相关资源
      最近更新 更多