2014-02-02 4 views
1

Я пытаюсь обновить поля в моих документах solr через cURL, потому что метод частичного обновления недоступен в Aprpal PHP-клиенте Solr. Прежде чем я попытался API PHP локон, я попробовал вручную через терминал:Solr PHP Неверный запрос после отправки JSON через cURL

curl http://[server-ip]:8080/solr/collection1/update -H 'Content-type:application/json'd-d '[{"url":"https:\/\/hrz1.rz.htw-berlin.de\/oneNet\/NetStorage\/Common%20HRZ\/Dozent\/FB4\/Classen\/DAWeb\/crawling12.pdf","titel":"Crawling - Ingo Cla\u00dfen HTW Berlin-8-8-1","keywords":{"add":["cla\u00dfen","peter pan","htw-berlin"]},"bewertung":{"set":"5"},"schwierigkeit":{"set":"5"}}]' 

Ответ:

{"responseHeader":{"status":0,"QTime":9}} 

Он работает тихо хорошо. После этого я попробовал PHP API.

$exampledata = array("url" => 'google.de', "titel" => "peter"); 
//make a json file 
$update = json_encode($exampledata); 
pr($update); 
//send json file to solr-server 
$curlSolrUpdate = curl_init(); 
curl_setopt($curlSolrUpdate, CURLOPT_URL, "http://[server-ip]:8080/solr/collection1/update"); 

//curl_setopt($curlSolrUpdate, CURLOPT_POST, 1); 
curl_setopt($curlSolrUpdate,CURLOPT_POST,true); 
curl_setopt($curlSolrUpdate, CURLOPT_POSTFIELDS, $update); 
//curl_setopt($curlSolrUpdate, CURLINFO_HEADER_OUT, true); 
curl_setopt($curlSolrUpdate, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curlSolrUpdate, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); 
curl_setopt($curlSolrUpdate, CURLOPT_VERBOSE, true); 


$verbose = fopen('php://temp', 'rw+'); 
curl_setopt($curlSolrUpdate, CURLOPT_STDERR, $verbose); 


$result = curl_exec($curlSolrUpdate); 

rewind($verbose); 
$verboseLog = stream_get_contents($verbose); 


echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n"; 
//get server response 

die(pr($result)); 

сервера Ответ:

Verbose information: 
* About to connect() to [server-ip] port 8080 (#0) 
* Trying [server-ip]... 
* connected 
* Connected to 1[server-ip] ([server-ip]) port 8080 (#0) 
> POST /solr/collection1/update HTTP/1.1 
Host: [server-ip]:8080 
Accept: */* 
Content-Type:application/json 
Content-Length: 35 

* upload completely sent off: 35 out of 35 bytes 
* HTTP 1.1 or later with persistent connection, pipelining supported 
< HTTP/1.1 400 Bad Request 
< Server: Apache-Coyote/1.1 
< Content-Type: text/plain;charset=UTF-8 
< Transfer-Encoding: chunked 
< Date: Sun, 02 Feb 2014 20:51:43 GMT 
< Connection: close 
< 
* Closing connection #0 

{"responseHeader":{"status":400,"QTime":2},"error":{"msg":"Unknown command: url [6]","code":400}} 

Так почему же Solr говорит плохой запрос -> неизвестная команда: URL? Должен ли мой файл получить экранированные строки? Я уже подтвердил формат json.

Сначала я попытался с гораздо более сложным файлом json. Я также попытался установить длину содержимого для информации заголовка. Но это автоматически устанавливается cURL.

Заранее благодарим за помощь!

ответ

0

Вам необходимо добавить команду для выполнения на solr. Например.

$exampledata = array('add' => array('doc' => array("url" => 'google.de', "titel" => "peter"))); 
+0

и упаковывают вы просто хотите обновить документ (ответ здесь предполагается, что вы хотите добавить документ), сделать '$ обновления = json_encode (массив ($ exampledata));' – Populus

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