@@ -2717,6 +2717,96 @@ public void shouldRespectSourceFilterWithScanAndScrollForGivenSearchQuery() {
2717
2717
everyItem (nullValue ()));
2718
2718
}
2719
2719
2720
+ @ Test //DATAES-457
2721
+ public void shouldSortResultsGivenSortCriteriaWithScanAndScroll () {
2722
+ // given
2723
+ List <IndexQuery > indexQueries = new ArrayList <>();
2724
+ // first document
2725
+ String documentId = randomNumeric (5 );
2726
+ SampleEntity sampleEntity1 = SampleEntity .builder ().id (documentId ).message ("abc" ).rate (10 )
2727
+ .version (System .currentTimeMillis ()).build ();
2728
+
2729
+ // second document
2730
+ String documentId2 = randomNumeric (5 );
2731
+ SampleEntity sampleEntity2 = SampleEntity .builder ().id (documentId2 ).message ("xyz" ).rate (5 )
2732
+ .version (System .currentTimeMillis ()).build ();
2733
+
2734
+ // third document
2735
+ String documentId3 = randomNumeric (5 );
2736
+ SampleEntity sampleEntity3 = SampleEntity .builder ().id (documentId3 ).message ("xyz" ).rate (10 )
2737
+ .version (System .currentTimeMillis ()).build ();
2738
+
2739
+ indexQueries = getIndexQueries (Arrays .asList (sampleEntity1 , sampleEntity2 , sampleEntity3 ));
2740
+
2741
+ elasticsearchTemplate .bulkIndex (indexQueries );
2742
+ elasticsearchTemplate .refresh (SampleEntity .class );
2743
+
2744
+ SearchQuery searchQuery = new NativeSearchQueryBuilder ().withQuery (matchAllQuery ())
2745
+ .withSort (new FieldSortBuilder ("rate" ).order (SortOrder .ASC ))
2746
+ .withSort (new FieldSortBuilder ("message" ).order (SortOrder .DESC )).withPageable (PageRequest .of (0 , 10 ))
2747
+ .build ();
2748
+ // when
2749
+ ScrolledPage <SampleEntity > scroll = (ScrolledPage <SampleEntity >) elasticsearchTemplate
2750
+ .startScroll (1000 , searchQuery , SampleEntity .class );
2751
+ List <SampleEntity > sampleEntities = new ArrayList <>();
2752
+ while (scroll .hasContent ()) {
2753
+ sampleEntities .addAll (scroll .getContent ());
2754
+ scroll = (ScrolledPage <SampleEntity >) elasticsearchTemplate
2755
+ .continueScroll (scroll .getScrollId (), 1000 , SampleEntity .class );
2756
+ }
2757
+ // then
2758
+ assertThat (sampleEntities .size (), equalTo (3 ));
2759
+ assertThat (sampleEntities .get (0 ).getRate (), is (sampleEntity2 .getRate ()));
2760
+ assertThat (sampleEntities .get (1 ).getRate (), is (sampleEntity3 .getRate ()));
2761
+ assertThat (sampleEntities .get (1 ).getMessage (), is (sampleEntity3 .getMessage ()));
2762
+ assertThat (sampleEntities .get (2 ).getRate (), is (sampleEntity1 .getRate ()));
2763
+ assertThat (sampleEntities .get (2 ).getMessage (), is (sampleEntity1 .getMessage ()));
2764
+ }
2765
+
2766
+ @ Test //DATAES-457
2767
+ public void shouldSortResultsGivenSortCriteriaFromPageableWithScanAndScroll () {
2768
+ // given
2769
+ List <IndexQuery > indexQueries = new ArrayList <>();
2770
+ // first document
2771
+ String documentId = randomNumeric (5 );
2772
+ SampleEntity sampleEntity1 = SampleEntity .builder ().id (documentId ).message ("abc" ).rate (10 )
2773
+ .version (System .currentTimeMillis ()).build ();
2774
+
2775
+ // second document
2776
+ String documentId2 = randomNumeric (5 );
2777
+ SampleEntity sampleEntity2 = SampleEntity .builder ().id (documentId2 ).message ("xyz" ).rate (5 )
2778
+ .version (System .currentTimeMillis ()).build ();
2779
+
2780
+ // third document
2781
+ String documentId3 = randomNumeric (5 );
2782
+ SampleEntity sampleEntity3 = SampleEntity .builder ().id (documentId3 ).message ("xyz" ).rate (10 )
2783
+ .version (System .currentTimeMillis ()).build ();
2784
+
2785
+ indexQueries = getIndexQueries (Arrays .asList (sampleEntity1 , sampleEntity2 , sampleEntity3 ));
2786
+
2787
+ elasticsearchTemplate .bulkIndex (indexQueries );
2788
+ elasticsearchTemplate .refresh (SampleEntity .class );
2789
+
2790
+ SearchQuery searchQuery = new NativeSearchQueryBuilder ().withQuery (matchAllQuery ()).withPageable (
2791
+ PageRequest .of (0 , 10 , Sort .by (Sort .Direction .ASC , "rate" ).and (Sort .by (Sort .Direction .DESC , "message" ))))
2792
+ .build ();
2793
+ // when
2794
+ ScrolledPage <SampleEntity > scroll = (ScrolledPage <SampleEntity >) elasticsearchTemplate
2795
+ .startScroll (1000 , searchQuery , SampleEntity .class );
2796
+ List <SampleEntity > sampleEntities = new ArrayList <>();
2797
+ while (scroll .hasContent ()) {
2798
+ sampleEntities .addAll (scroll .getContent ());
2799
+ scroll = (ScrolledPage <SampleEntity >) elasticsearchTemplate
2800
+ .continueScroll (scroll .getScrollId (), 1000 , SampleEntity .class );
2801
+ }
2802
+ // then
2803
+ assertThat (sampleEntities .size (), equalTo (3 ));
2804
+ assertThat (sampleEntities .get (0 ).getRate (), is (sampleEntity2 .getRate ()));
2805
+ assertThat (sampleEntities .get (1 ).getRate (), is (sampleEntity3 .getRate ()));
2806
+ assertThat (sampleEntities .get (1 ).getMessage (), is (sampleEntity3 .getMessage ()));
2807
+ assertThat (sampleEntities .get (2 ).getRate (), is (sampleEntity1 .getRate ()));
2808
+ assertThat (sampleEntities .get (2 ).getMessage (), is (sampleEntity1 .getMessage ()));
2809
+ }
2720
2810
2721
2811
private IndexQuery getIndexQuery (SampleEntity sampleEntity ) {
2722
2812
return new IndexQueryBuilder ()
0 commit comments