2016-04-20 16 views
2

Ich habe versucht, elastische Daten zu listen. Da die Methode getSourceAsObjectList() veraltet ist, habe ich Code wie diesen erstellt.Jest Mapping mit getSourceAsObjectList()

Es funktioniert nicht so, wie ich es erwarte und sieht chaotisch aus (es verwendet zwei Listenwerte, um das Ergebnis zu kartieren). Mache ich falsch?

Antwort

1

Michaels Antwort hat mir geholfen und ist ein schöner Weg, es zu tun. Hier ist, was ich gefunden habe einschließlich aller Teile, die ich verwendet habe, um die Abfrage zu machen und das Ergebnis zu erhalten.

In meinem Fall wollte ich eine Liste von Benutzer-IDs erhalten, die von der Quelle jedes Dokuments im Ergebnis gesammelt wurden.

class DocSource { 
    private Integer userId; 

    public Integer getUserId() { 
     return userId; 
    } 
} 

String query = "{\n" 
     + " \"_source\": [\n" 
     + "  \"userId\"\n" 
     + " ],\n" 
     + " \"query\": {\n" 
     + "   <some query config here>" 
     + "  }\n" 
     + " }\n" 
     + "}"; 

Search search = new Search.Builder(query) 
    .addIndex("my-index") 
    .build(); 

SearchResult result = jestClient.execute(search); 
List<SearchResult.Hit<DocSource, Void>> hits = result.getHits(DocSource.class); 

List<Integer> listOfIds = hits.stream() 
    .map(h -> h.source.getUserId()) 
    .collect(Collectors.toList()); 
2

Haben Sie so etwas wie dies versucht:

List< activityObj> list = hits.stream().map(h -> h.source).collect(Collectors.toList());