2016-04-20 6 views
2

リストに弾性データをマップしようとしました。 getSourceAsObjectList()メソッドは廃止予定ですので、このようなコードを作成しました。getSourceAsObjectList()でのJestマッピング

class activityObj { 
    private String name; 
    private String oid; 
    public String getName() 
    { 
     return name; 
    } 
    public void setName(String name) 
    { 
     this.name = name; 
    } 
    public String getOid() 
    { 
     return oid; 
    } 
    public void setOid(String oid) 
    { 
     this.oid = oid; 
    } 
} 

List< Hit<activityObj, Void>> hits = result.getHits(activityObj.class); 
List< activityObj> list = new ArrayList<activityObj>(); 

for (SearchResult.Hit<activityObj, Void> hit: hits) { 
    activityObj objectSource = hit.source; // null point error 
    list.add(objectSource); 
    logger.info("hits : " + objectSource.getName()); 
} 

私が期待しているようにはうまくいかず、見た目が乱雑です(結果をマップするのに2つのリスト値を使用しています)。私は間違っているのですか?

答えて

1

マイケルの答えは、私を助けてくれて、それを行うには良い方法です。ここでは、私がクエリを作成して結果を得るために使用したすべての部分を含めて思いついたことがあります。

私の場合、結果の各ドキュメントのソースから収集されたユーザーIDのリストを取得したいと考えました。

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

あなたはこのような何かを試してみました:

List< activityObj> list = hits.stream().map(h -> h.source).collect(Collectors.toList()); 
関連する問題