Solr 5.3更新查询VS Solr 3.6(使用php curl和json)

时间:2015-12-01 14:31:59

标签: php json curl solr

在我的服务器上设置solr 3.6之前,我开始使用Bitnami Solr Stack 5.0。

以下是我用于索引数据的方式:

    $ch = curl_init(SOLR_HOST . SOLR_CORE_PRODUCTS . "/update?wt=json&commitWithin=4000&debugQuery=true&overwrite=&true&commit=true");

    $json = array(array("Field" => "value", "Field2" => "value2"));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $js);
    $response = curl_exec($ch);

现在,让我们关注索尔的男人

  

Solr 3.1示例

Solr 3.2是第一个支持array-of-JSONObject语法的版本,所以在Solr 3.1中,需要使用重复的名称(" add"标记)一次添加多个文档。 JSON中具有重复名称是合法的。例如:

curl http://localhost:8983/solr/update/json -H 'Content-type:application/json' -d '
{
 "add": {"doc": {"id" : "TestDoc1", "title" : "test1"} },
 "add": {"doc": {"id" : "TestDoc2", "title" : "another test"} }
}'

我通过:

    $ch = curl_init(SOLR_HOST . SOLR_CORE_PRODUCTS . "/update?wt=json&commitWithin=4000&debugQuery=true&overwrite=&true&commit=true");

    $json = array("add: " => array("doc:" =>array("Field" => "value", "Field2" => "value2")));

    $js = json_encode($json);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $js);
    $response = curl_exec($ch);

会做这个工作。 $ js具有以下价值:  {"add: ":{"doc:":{"Field":"value","Field2":"value2"}}}

错误是:

  

消息意外的字符' {' (代码123)pr​​olog;预期'<'在[row,col {unknown-source}]:[1,1]

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

看起来您正在使用XML更新处理程序。尝试将您的json发布到:

curl -X POST 'http://localhost:8983/solr/update/json?commit=true' -H 'Content-type:application/json; charset=UTF-8' --data @data.json

查看solrconfig.xml以检查正确的请求处理程序,在Solr 3.6上你将有一个这样的条目:

<requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy"/>

如果您检查Solr日志,您应该看到如下例外:

SEVERE: org.apache.solr.common.SolrException: Unexpected character '{' (code 123) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]
        at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:81)

这里显然正在调用XML处理程序。

仅适用于Solr的版本&gt; 4. *更新处理程序可以从流中确定数据类型。