2016-07-13 9 views
0

Отключение этой ссылки here, я пытаюсь обновить запись в моем экземпляре solr с помощью PHP и cURL, но я немного не знаком с командной строкой cURL, поэтому я не уверен, что я «Я делаю неправильно.solr php curl update command

$ch = curl_init("http://localhost:8983/solr/database/update"); 

$data = array(
      "id" => "6686", 
      "name" => array(
      "set" => "Brian") 
     ); 

$data_string = json_encode($data);   

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, $data_string); 

echo curl_exec($ch); 

Здесь ошибка я получаю - я уверен, что «идентификатор» является поле в моем случае Solr:

{"responseHeader":{"status":400,"QTime":2},"error":{"msg":"Unknown command 'id' at [5]","code":400}} 

ответ

0

Вы можете попробовать этот код, чтобы получить значение данных, передаваемых по проверьте это правильно или неправильно.

echo '<pre>'.print_r(json_decode(file_get_contents("php://input")),1).'</pre>'; 

И использовать этот код, чтобы заменить

$data = array(
     "id" => "6686", 
     "name" => array(
     "set" => "Brian") 
    );                
$data_string = json_encode($data); 
$ch = curl_init('http://localhost:8983/solr/database/update'); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);      
$result = curl_exec($ch); 
+0

Хмм ... это дает мне тот же результат, что и у меня, - и «print_r» не распечатывается что-нибудь. –

0

Основная идея моего первоначального вопроса было правильно - всего несколько вопросов синтаксиса он выглядит. Нижеприведенный код работает для обновления записи solr с использованием PHP и cURL. Я должен был добавить дополнительный слой array( к моему $data_string, а также добавить ?commit=true к URL

$ch = curl_init("http://localhost:8983/solr/database/update?commit=true"); 

$data = array(
      "id" => "6686", 
      "name" => array(
      "set" => "Brian") 
     ); 

$data_string = json_encode(array($data));   

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, $data_string); 

echo curl_exec($ch); 

Вы думаете, что бы некоторые рода документации по этому вопросу ... но я не думаю. Надеюсь, это поможет кому-то еще, кто хочет сделать эту же невероятно простую вещь в будущем ....

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