【问题标题】:indexing documents in Apache Solr using php-curl library使用 php-curl 库在 Apache Solr 中索引文档
【发布时间】:2012-07-02 07:28:12
【问题描述】:

我正在使用 php curl 库对文件进行索引。我被代码困在这里

echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
     $result=move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
     if ($result == 1) echo "<p>Upload done .</p>";
        $options = getopt("f:");
        $infile = $options['f'];

        $url = "http://localhost:8983/solr/update/";
        $filename = "upload/" . $_FILES["file"]["name"];
        $handle = fopen($filename, "rb");
        $contents = fread($handle, filesize($filename));
        fclose($handle);
        echo $url;
        $post_string = file_get_contents("upload/" . $_FILES["file"]["name"]);
        echo $contents;
        $header = array("Content-type:text/xml; charset=utf-8");

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLINFO_HEADER_OUT, 1);

        $data = curl_exec($ch);

        if (curl_errno($ch)) {
           print "curl_error:" . curl_error($ch);
        } else {
           curl_close($ch);
           print "curl exited okay\n";
           echo "Data returned...\n";
           echo "------------------------------------\n";
           echo $data;
           echo "------------------------------------\n";
        }

结果没有显示任何内容。此外,Apache Solr 的事件日志中没有显示任何内容。 请帮我写代码

【问题讨论】:

    标签: php apache curl solr


    【解决方案1】:

    在您从上传文件中读取的$post_string 中,该文件是否以&lt;commit /&gt; 结尾?否则,将不会向 Solr 提交任何内容,因此请确保您的命令集以 &lt;commit /&gt; 结尾。

    另外,我强烈不推荐这种更新文件的方式。如果有人不择手段地弄清楚您的管道以及如何运行此文件,他们很容易对您的 Solr 索引造成严重破坏。

    【讨论】:

      【解决方案2】:

      这对我有用,与您的代码相同,但将 url 更改为以下内容

      $url = "http://localhost:8983/solr/CORE_NAME/update/?commit=true";
      

      【讨论】:

        【解决方案3】:

        这对我来说是这样的:

        $target_url = $config['core']['solr_host'] . "/solr/update/extract?commit=true&literal.id=" . urlencode ( $page ['id'] ) . "&literal.url=" . urlencode ( rtrim(BASE_URL . $page ['path'],"/") );
        $file_name_with_full_path = WEBSITE_PATH . $page ['path'];
        
        $post = array (
           'myFile' => '@' . $file_name_with_full_path 
        );
        
        $ch = curl_init ();
        curl_setopt ( $ch, CURLOPT_URL, $target_url );
        curl_setopt ( $ch, CURLOPT_POST, 1 );
        curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post );
        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt ( $ch, CURLOPT_USERPWD, "user:pass" ); // for Apache Basic Auth
        
        
        $result = curl_exec ( $ch );
        $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close ( $ch );
        
        echo $result;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多