2017-02-15 109 views
0

如何排序elasticsearch結果讓我使用開玩笑練習elasticsearch 5.2有這樣的:使用開玩笑

@Override 
public List<Aptitude> findAllAptitudes() { 
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
    searchSourceBuilder.query(QueryBuilders.matchAllQuery()); 

    Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(APTITUDE_INDEX_NAME).build(); 

    try { 
     SearchResult result = JestClientUtils.getClient().execute(search); 
     List<Hit<Aptitude, Void>> aptitudes = result.getHits(Aptitude.class); 
     return aptitudes.stream().map(this::getAptitude).sorted(new Comparator<Aptitude>() { 

      @Override 
      public int compare(Aptitude o1, Aptitude o2) { 
       return o1.getId().compareTo(o2.getId()); 
      } 
     }).collect(Collectors.toList()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     throw new RuntimeException(e); 
    } 
} 

private Aptitude getAptitude(Hit<Aptitude, Void> hit) { 
    return hit.source; 
} 

,但我想通過ID有序結果(屬性附加傷害從能力),但不能完全弄清楚如何。 有人可以指出我正確的方向嗎? 在此先感謝

回答

2

你不需要在Java中對結果進行排序,你可以簡單地讓ES爲你做。您可以添加下面的第三行並刪除所有Java Stream代碼。

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
searchSourceBuilder.query(QueryBuilders.matchAllQuery()); 
searchSourceBuilder.sort("id", SortOrder.ASC); 
+0

這正是我所期待的,謝謝 –