2015-12-01 2 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"} } 
}' 

Я думал, что:

$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) в прологе; ожидаемый «<» в [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. * обработчик обновления может определить тип данных из потока.

Смежные вопросы