2016-05-17 8 views
0

I folgenden Code zum Indexieren Dokument in solr curl Anfrage durch die C++ für die Indizierung solr Dokument

CURL *curl = curl_easy_init(); 
CURLcode res; 
if(curl) { 
/* First set the URL that is about to receive our POST. This URL can 
just as well be a https:// URL if that is what should receive the 
    data. */ 
    curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.0.164:8983/solr/collection1/update?replacefields=false -H 'Content-type: application/json' -d '[{\"id\":\"4000\", \"to\":\"Life is to.\", \"cc\":\"unknown \", \"subject\":\"Life\"}]'"); 

    /* Perform the request, res will get the return code */ 
    res = curl_easy_perform(curl); 
    if(CURLE_OK == res){ 
     logger.LogError("res value CURLE_OK"); 
    } 
    /* always cleanup */ 
    curl_easy_cleanup(curl); 
} 

und den Rückgabewert von curl_easy_perform (curl)

dh verwenden res ist CURLE_OK aber die Platten indizieren keine in collection1 von solr und während der Buchung folgenden Befehl aus dem Terminal-Datensatz wird indiziert

curl http://192.168.0.164:8983/solr/collection1/update?replacefields=false -H 'Content-type: application/json' -d '[{"id":"4000", "to":"Life is to.", "cc":"unknown ", "subject":"Life"}]' 

Antwort

0

Sie liefern nicht cURL mit Ihrer richtigen URL. Alles nach der tatsächlichen URL -H 'Content-type: application/json' -d '[{\"id\":\"4000\", \"to\":\"Life is to.\", \"cc\":\"unknown \", \"subject\":\"Life\"}]' ist nur ein Argument für das cURL-Befehlszeilentool und gehört nicht zur URL.

Die URL-Option sollte nur http://192.168.0.164:8983/solr/collection1/update?replacefields=false sein. Der Rest der Parameter muss als eigene curl_easy_setopt Aufrufe festgelegt werden.

Um die Daten auf POST zu setzen, verwenden Sie CURLOPT_POSTFIELDS.

Übergeben Sie ein Char * als Parameter und zeigen Sie auf die vollständigen Daten in einem HTTP-POST-Vorgang senden. Sie müssen sicherstellen, dass die Daten so formatiert sind, wie sie vom Server empfangen werden sollen.

den richtigen Anfrage Inhaltstyp einzustellen, verwendet CURLOPT_HTTPHEADER.

Übergeben Sie einen Zeiger auf eine verknüpfte Liste von HTTP-Headern, die in Ihrer HTTP-Anforderung an den Server und/oder den Proxy übergeben werden. Dieselbe Liste kann sowohl für Host- als auch für Proxy-Anfragen verwendet werden!

Nach Einstellung aller Optionen rufen Sie curl_easy_perform. Möglicherweise möchten Sie auch das Protokoll auf dem Solr-Server sehen, um festzustellen, ob Solr eine Ausnahme generiert. Sie können auch CURLOPT_ERRORBUFFER und CURLOPT_VERBOSE setzen, um weitere Informationen zu einem internen Fehler in cURL zu erhalten (CURLE_OK wird zurückgegeben, solange cURL die Anforderung ausführen kann - aber nicht, wenn der Server 400 oder 404 oder einen tatsächlichen Fehlercode zurückgibt die Server-Seite (außer wenn CURLOPT_FAILONERROR gesetzt) ​​

+0

Hallo oben Vorschlag versucht hatte, aber als Antwort auf Terminal i Störung erhalten als:. 400 5 fehlender content stream 400 Anuja

+0

Ich denke, dass ich Parameter nicht richtig zur Verfügung stelle. Wie sollte ich -H 'übergeben Content-Typ: Anwendung/Json' -d Parameter – Anuja

+0

@Anuja Das ist irgendwie der Inhalt meines Beitrags. Verwenden Sie 'CURLOPT_POSTFIELDS', um die Daten auf POST (den Parameter' -d') und 'CURLOPT_HTTPHEADER' festzulegen, um einen' Content-Type: '-Header festzulegen. – MatsLindh