2015-12-01 76 views
1

在我的服務器上設置solr 3.6之前,我開始使用Bitnami Solr Stack 5.0。Solr 5.3更新查詢VS Solr 3.6(使用php curl和json)

這是我如何索引用我的數據:

$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的人

Solr的3.1例

Solr的3.2是第一個版本支持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"} } 
}' 

我throught說:

$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)在序言;預計'<'at [row,col {unknown-source}]:[1,1]

任何想法?

回答

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> 4. *版本中,更新處理程序可以從流中確定數據類型。