在我的服务器上设置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)prolog;预期'<'在[row,col {unknown-source}]:[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. *更新处理程序可以从流中确定数据类型。