2016-07-13 18 views
0

here私はPHPとcURLを使用して私のsolrインスタンスのレコードを更新しようとしていますが、私はコマンドラインcURLになじみがありません。間違っているここでsolr php curl updateコマンド

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

は私が取得していますエラーです - 私は「idは」私の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

私の元の質問の基本的な考え方を置き換えるために、このコードを使用するには正しかったです。以下のコードはPHPとcURLを使ってsolrレコードを更新するためのコードです。私は私の$data_stringarray(の余分なレイヤを追加し、また、あなたがこの上のドキュメントのいくつかの並べ替えがあると思う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); 

?commit=trueを追加する必要がありました...しかし、私はないと思います。私はこれが将来この同じように信じられないほど単純なことをやろうとしている他の誰かに役立つことを願っています....