Я пытаюсь обновить поля в моих документах 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.
Заранее благодарим за помощь!
и упаковывают вы просто хотите обновить документ (ответ здесь предполагается, что вы хотите добавить документ), сделать '$ обновления = json_encode (массив ($ exampledata));' – Populus