2016-05-13 8 views
0

Ich bin neu in Java-Programmierung und brauche hier Hilfe. ich unten Code leite und bekommen entsprechende Antwort heißtElasticSearch Multiget Problem in Java

{"name1":"Name2","date1":"2016-05-13","message1":"Message2"} 
{"name1":"Name0","date1":"2016-05-13","message1":"Message0"} 


MultiGetResponse multiGetItemResponses = client.prepareMultiGet() 
     .add("loc", "message", "AVSoemK55hnvwxeDfgCc", "AVSoemK55hnvwxeDfgCa").get(); 


for(MultiGetItemResponse itemResponse: multiGetItemResponses){ 
GetResponse response2 = itemResponse.getResponse(); 
     if(response2.isExists()){ 
     String json2 = response2.getSourceAsString(); 
     System.out.println(json2); 
     } 
    } 

jedoch, wenn i den Suchtext parametrisieren bin versucht, Rückkehr seiner keinen Wert. Kann mir bitte jemand sagen, was hier schief gehen könnte? Ich habe überprüft, dass variable abc wird korrekten Wert heißt „AVSoemK55hnvwxeDfgCc“, „AVSoemK55hnvwxeDfgCa“

public static boolean getData(String ids){ 

    String idAry[] = ids.split(","); 

    ArrayList<String> idStr = new ArrayList<String>(); 
    for (String id:idAry){ 
     idStr.add('"'+id+'"'); 

    } 

    String abc = idStr.toString().replace("[", "").replace("]", ""); 
    System.out.println(abc); 
    MultiGetResponse multiGetItemResponses = client.prepareMultiGet() 
      .add("loc", "message", abc).get(); 
// MultiGetResponse multiGetItemResponses = client.prepareMultiGet() 
//   .add("loc", "message", "AVSoemK55hnvwxeDfgCc", "AVSoemK55hnvwxeDfgCa").get(); 
// 

    for(MultiGetItemResponse itemResponse: multiGetItemResponses){ 
    GetResponse response2 = itemResponse.getResponse(); 
      if(response2.isExists()){ 
      String json2 = response2.getSourceAsString(); 
      System.out.println(json2); 
      } 
     } 
    return true; 

    } 

Antwort

0

Sie Rückkehr brauchen nicht die abc Variable, das heißt, Sie brauchen nicht Ihre Liste String zu verwandeln. Sie müssen Ihre Anfrage einfach so konstruieren, indem Sie idList an Ihren add() Anruf übergeben, da dieser Anruf den Index, den Typ und einen Iterable<String> übernimmt, so dass der idList bereits die Aufgabe erfüllt.

public static boolean getData(String ids){ 
    String idAry[] = ids.split(","); 
    List<String> idList = Arrays.asList(idAry); 

    MultiGetResponse multiGetItemResponses = client.prepareMultiGet() 
     .add("loc", "message", idList).get(); 
    ... 
+0

cool, es hat funktioniert. –

+0

Super, froh, dass es geklappt hat !! – Val

+0

Wie erstellt man eine MultiGerResponse-Abfrage mit jeder Abfrage, die mehrere 'where' Bedingungen hat? Vielen Dank! – Vimal