2016-09-27 29 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(); 

は、1つの文書のみ、すなわちを返します。

関連する問題