2017-02-16 1 views
0

Ich habe die folgende Abfrage, die ich in der Lage bin über die Befehlszeile auszuführen:elastische Abfrage Suche curl in Java unter Verwendung von

curl -XPOST "http://35.160.73.241:9201/products/_search" -d 
            "{"query":{"match":{"campaign_id":"12239"}}}" 

Ich brauche die obige Abfrage mit Java auszuführen. Ich verwende den folgenden Code ein:

 try { 
      Process process = Runtime.getRuntime().exec("curl -XPOST 
         \"http://35.160.73.241:9201/products/_search\" -d 
         \"{\"query\":{\"match\":{\"campaign_id\":\"12239\"}}}\""); 
      int resultCode = process.waitFor(); 
      System.out.println(resultCode); 
      if (resultCode == 0) { 
       // all is good 
      } 
     } catch (Exception ex) { 
      // process cause 
      ex.printStackTrace(); 
     } 

Aber es gibt mir die folgende Ausnahme:

java.io.IOException: Cannot run program "curl": CreateProcess 
        error=2, The system cannot find the file specified 

Bitte helfen Sie mir die Abfrage mit Java auszuführen.

Antwort

0

Sie müssen die Umgebung einstellen. Versuchen Sie folgendes:

String env = new String[] { "PATH=/bin:/usr/bin/" }; 
String[] cmd = new String[] {"curl", "-XPOST", "\"http://35.160.73.241:9201/products/_search\"", "-d", "\"{\"query\":{\"match\":{\"campaign_id\":\"12239\"}}}\""} 
Process process = Runtime.getRuntime().exec(cmd, env); 

Das funktioniert, wenn Sie ein Linux System verwenden. Eine bessere Lösung wird HttpURLConnection sein. Dies ist der übliche Weg, um HTTP-Verbindungen zu erstellen, und ist systemunabhängig.

+0

Ich verwende Windows –

+0

@ShivyeshAgnihotri In diesem Fall. Ersetzen Sie das 'env'-Array durch:' {"curl =/pfad/zu/curl.exe"} 'oder so ähnlich. – Titus

+0

funktioniert nicht mit curl.exe Pfad auch –

0

Warum verwenden Sie nicht einfach eine java client für elastische Suche anstelle von curl. Es gibt verschiedene Vorteile, z. B. das einfache Erstellen von Abfragen und das Erkennen des Clusterstatus.

Verwandte Themen