2016-09-27 25 views
0

我正在尋找一種優雅的方式來檢索在他的某個字段中具有最大價值的文檔。 例如,我想檢索具有最大時間戳的文檔。 我試過使用聚合,但它無法讓它工作,它只會返回一個字段。 我也考慮過使用排序和獲取第一個元素,但我發現有點暴力。這樣的查詢會像這樣:Spring elasticsearch - 檢索一個字段中具有最大價值的文檔

SearchQuery searchQuery = new NativeSearchQueryBuilder() 
      .withPageable(new PageRequest(0, 1)) 
      .withSort(SortBuilders.fieldSort(FIELD_TIMESTAMP) 
        .order(SortOrder.DESC)) 
      .build(); 

有沒有更好的方式來做這樣的任務?

回答

3

您可以使用SearchResponse的size()方法獲取響應最高的文檔。

您所查詢的,它應該是這樣的:從您的查詢響應頭文件:

FieldSortBuilder timestampSort = SortBuilders.fieldSort(FIELD_TIMESTAMP).order(SortOrder.DESC); 

SearchResponse response = client.prepareSearch(index) 
      .addSort(timestampSort) 
      .setSize(1) 
      .execute() 
      .actionGet(); 

上面的查詢將返回只有一個文件,即。

相關問題