20
20
import java .util .ArrayList ;
21
21
import java .util .HashMap ;
22
22
import java .util .HashSet ;
23
+ import java .util .Map ;
23
24
import org .junit .jupiter .api .AfterAll ;
24
25
import org .junit .jupiter .api .BeforeEach ;
25
26
import org .junit .jupiter .api .Tag ;
@@ -86,8 +87,8 @@ public void testSearchOffset() throws Exception {
86
87
SearchRequest searchRequest = SearchRequest .builder ().q ("a" ).offset (20 ).build ();
87
88
SearchResult searchResult = (SearchResult ) index .search (searchRequest );
88
89
89
- assertThat (searchResult .getHits (), hasSize (10 ));
90
- assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (30 )));
90
+ assertThat (searchResult .getHits (), hasSize (11 ));
91
+ assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (31 )));
91
92
}
92
93
93
94
/** Test search limit */
@@ -105,7 +106,7 @@ public void testSearchLimit() throws Exception {
105
106
SearchResult searchResult = (SearchResult ) index .search (searchRequest );
106
107
107
108
assertThat (searchResult .getHits (), hasSize (2 ));
108
- assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (30 )));
109
+ assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (31 )));
109
110
}
110
111
111
112
/** Test search attributesToRetrieve */
@@ -310,7 +311,7 @@ public void testSearchWithMatchingStrategy() throws Exception {
310
311
SearchResult searchResult = (SearchResult ) index .search (searchRequest );
311
312
312
313
assertThat (searchResult .getHits (), hasSize (20 ));
313
- assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (21 )));
314
+ assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (22 )));
314
315
}
315
316
316
317
/** Test search with frequency matching strategy */
@@ -685,12 +686,10 @@ public void testRawSearchSortWithPlaceHolder() throws Exception {
685
686
Results resGson = jsonGson .decode (index .rawSearch (searchRequest ), Results .class );
686
687
687
688
assertThat (resGson .hits , is (arrayWithSize (20 )));
688
- assertThat (resGson .hits [0 ].getId (), is (equalTo ("155" )));
689
- assertThat (resGson .hits [0 ].getTitle (), is (equalTo ("The Dark Knight" )));
690
- assertThat (resGson .hits [1 ].getId (), is (equalTo ("671" )));
691
- assertThat (
692
- resGson .hits [1 ].getTitle (),
693
- is (equalTo ("Harry Potter and the Philosopher's Stone" )));
689
+ assertThat (resGson .hits [0 ].getId (), is (equalTo ("2" )));
690
+ assertThat (resGson .hits [0 ].getTitle (), is (equalTo ("Hobbit" )));
691
+ assertThat (resGson .hits [1 ].getId (), is (equalTo ("155" )));
692
+ assertThat (resGson .hits [1 ].getTitle (), is (equalTo ("The Dark Knight" )));
694
693
}
695
694
696
695
/** Test search matches */
@@ -728,7 +727,7 @@ public void testSearchPage() throws Exception {
728
727
assertThat (searchResult .getHits (), hasSize (20 ));
729
728
assertThat (searchResult .getPage (), is (equalTo (1 )));
730
729
assertThat (searchResult .getHitsPerPage (), is (equalTo (20 )));
731
- assertThat (searchResult .getTotalHits (), is (equalTo (30 )));
730
+ assertThat (searchResult .getTotalHits (), is (equalTo (31 )));
732
731
assertThat (searchResult .getTotalPages (), is (equalTo (2 )));
733
732
}
734
733
@@ -749,8 +748,8 @@ public void testSearchPagination() throws Exception {
749
748
assertThat (searchResult .getHits (), hasSize (2 ));
750
749
assertThat (searchResult .getPage (), is (equalTo (2 )));
751
750
assertThat (searchResult .getHitsPerPage (), is (equalTo (2 )));
752
- assertThat (searchResult .getTotalHits (), is (equalTo (30 )));
753
- assertThat (searchResult .getTotalPages (), is (equalTo (15 )));
751
+ assertThat (searchResult .getTotalHits (), is (equalTo (31 )));
752
+ assertThat (searchResult .getTotalPages (), is (equalTo (16 )));
754
753
}
755
754
756
755
/** Test place holder search */
@@ -931,6 +930,162 @@ public void testMultiSearchWithDistinct() throws Exception {
931
930
}
932
931
}
933
932
933
+ @ Test
934
+ public void testMultiSearchWithFacetsByIndex () {
935
+ HashSet <String > indexUids = new HashSet <String >();
936
+ indexUids .add ("movies" );
937
+ indexUids .add ("nestedMovies" );
938
+
939
+ for (String indexUid : indexUids ) {
940
+
941
+ Index index = client .index (indexUid );
942
+
943
+ TestData <Movie > nestedTestData = this .getTestData (NESTED_MOVIES , Movie .class );
944
+ TaskInfo task1 = index .addDocuments (nestedTestData .getRaw ());
945
+
946
+ index .waitForTask (task1 .getTaskUid ());
947
+
948
+ Settings settings = new Settings ();
949
+ settings .setFilterableAttributes (new String [] {"id" , "title" });
950
+ settings .setSortableAttributes (new String [] {"id" });
951
+
952
+ index .waitForTask (index .updateSettings (settings ).getTaskUid ());
953
+
954
+ TestData <Movie > moviesTestData = this .getTestData (MOVIES_INDEX , Movie .class );
955
+ TaskInfo task2 = index .addDocuments (moviesTestData .getRaw ());
956
+
957
+ index .waitForTask (task2 .getTaskUid ());
958
+ }
959
+
960
+ MultiSearchRequest search = new MultiSearchRequest ();
961
+
962
+ for (String indexUid : indexUids ) {
963
+ search .addQuery (new IndexSearchRequest (indexUid ).setQuery ("Hobbit" ));
964
+ }
965
+
966
+ MultiSearchFederation federation = new MultiSearchFederation ();
967
+ federation .setLimit (20 );
968
+ federation .setOffset (0 );
969
+ Map <String , String []> facetsByIndex = new HashMap <String , String []>();
970
+ facetsByIndex .put ("nestedMovies" , new String [] {"title" });
971
+ facetsByIndex .put ("movies" , new String [] {"title" , "id" });
972
+ federation .setFacetsByIndex (facetsByIndex );
973
+
974
+ MultiSearchResult results = client .multiSearch (search , federation );
975
+
976
+ assertThat (results .getHits ().size (), is (4 ));
977
+
978
+ HashMap <String , FacetRating > facetStats = results .getFacetStats ();
979
+ HashMap <String , HashMap <String , Integer >> facetDistribution =
980
+ results .getFacetDistribution ();
981
+
982
+ HashMap <String , FacetsByIndexInfo > facetsByIndexInfo = results .getFacetsByIndex ();
983
+
984
+ assertThat (facetDistribution , is (nullValue ()));
985
+ assertThat (facetStats , is (nullValue ()));
986
+ assertThat (facetsByIndexInfo , is (not (nullValue ())));
987
+
988
+ for (String indexUid : indexUids ) {
989
+ FacetsByIndexInfo indexInfo = facetsByIndexInfo .get (indexUid );
990
+ assertThat (indexInfo .getDistribution (), is (not (nullValue ())));
991
+ assertThat (indexInfo .getStats (), is (not (nullValue ())));
992
+ }
993
+
994
+ HashMap <String , HashMap <String , Integer >> moviesIndexDistribution =
995
+ facetsByIndexInfo .get ("movies" ).getDistribution ();
996
+
997
+ assertThat (moviesIndexDistribution .get ("id" ), is (not (nullValue ())));
998
+ assertThat (moviesIndexDistribution .get ("id" ).get ("2" ), is (equalTo (1 )));
999
+ assertThat (moviesIndexDistribution .get ("id" ).get ("5" ), is (equalTo (1 )));
1000
+ assertThat (moviesIndexDistribution .get ("title" ), is (not (nullValue ())));
1001
+ assertThat (moviesIndexDistribution .get ("title" ).get ("Hobbit" ), is (equalTo (1 )));
1002
+ assertThat (moviesIndexDistribution .get ("title" ).get ("The Hobbit" ), is (equalTo (1 )));
1003
+
1004
+ HashMap <String , FacetRating > moviesFacetRating = facetsByIndexInfo .get ("movies" ).getStats ();
1005
+ FacetRating idMoviesFacetRating = moviesFacetRating .get ("id" );
1006
+
1007
+ assertThat (idMoviesFacetRating , is (not (nullValue ())));
1008
+ assertThat (idMoviesFacetRating .getMin (), is (equalTo (2.0 )));
1009
+ assertThat (idMoviesFacetRating .getMax (), is (equalTo (5.0 )));
1010
+
1011
+ HashMap <String , HashMap <String , Integer >> nestedMoviesIndexDistribution =
1012
+ facetsByIndexInfo .get ("nestedMovies" ).getDistribution ();
1013
+
1014
+ assertThat (nestedMoviesIndexDistribution .get ("title" ), is (not (nullValue ())));
1015
+ assertThat (nestedMoviesIndexDistribution .get ("title" ).get ("Hobbit" ), is (equalTo (1 )));
1016
+ assertThat (nestedMoviesIndexDistribution .get ("title" ).get ("The Hobbit" ), is (equalTo (1 )));
1017
+
1018
+ HashMap <String , FacetRating > nestedMoviesFacetRating =
1019
+ facetsByIndexInfo .get ("nestedMovies" ).getStats ();
1020
+ assertThat (nestedMoviesFacetRating .size (), is (equalTo ((0 ))));
1021
+ }
1022
+
1023
+ @ Test
1024
+ public void testMultiSearchWithMergeFacets () {
1025
+ HashSet <String > indexUids = new HashSet <String >();
1026
+ indexUids .add ("movies" );
1027
+ indexUids .add ("nestedMovies" );
1028
+
1029
+ for (String indexUid : indexUids ) {
1030
+
1031
+ Index index = client .index (indexUid );
1032
+
1033
+ TestData <Movie > nestedTestData = this .getTestData (NESTED_MOVIES , Movie .class );
1034
+ TaskInfo task1 = index .addDocuments (nestedTestData .getRaw ());
1035
+
1036
+ index .waitForTask (task1 .getTaskUid ());
1037
+
1038
+ Settings settings = new Settings ();
1039
+ settings .setFilterableAttributes (new String [] {"id" , "title" });
1040
+ settings .setSortableAttributes (new String [] {"id" });
1041
+
1042
+ index .waitForTask (index .updateSettings (settings ).getTaskUid ());
1043
+
1044
+ TestData <Movie > moviesTestData = this .getTestData (MOVIES_INDEX , Movie .class );
1045
+ TaskInfo task2 = index .addDocuments (moviesTestData .getRaw ());
1046
+
1047
+ index .waitForTask (task2 .getTaskUid ());
1048
+ }
1049
+
1050
+ MultiSearchRequest search = new MultiSearchRequest ();
1051
+
1052
+ for (String indexUid : indexUids ) {
1053
+ search .addQuery (new IndexSearchRequest (indexUid ).setQuery ("Hobbit" ));
1054
+ }
1055
+
1056
+ MultiSearchFederation federation = new MultiSearchFederation ();
1057
+ federation .setLimit (20 );
1058
+ federation .setOffset (0 );
1059
+ federation .setMergeFacets (new MergeFacets (10 ));
1060
+ Map <String , String []> facetsByIndex = new HashMap <String , String []>();
1061
+ facetsByIndex .put ("nestedMovies" , new String [] {"title" });
1062
+ facetsByIndex .put ("movies" , new String [] {"title" , "id" });
1063
+ federation .setFacetsByIndex (facetsByIndex );
1064
+
1065
+ MultiSearchResult results = client .multiSearch (search , federation );
1066
+
1067
+ assertThat (results .getHits ().size (), is (4 ));
1068
+
1069
+ HashMap <String , FacetRating > facetStats = results .getFacetStats ();
1070
+ HashMap <String , HashMap <String , Integer >> facetDistribution =
1071
+ results .getFacetDistribution ();
1072
+
1073
+ assertThat (facetDistribution , is (not (nullValue ())));
1074
+ assertThat (facetStats , is (not (nullValue ())));
1075
+ assertThat (results .getFacetsByIndex (), is (nullValue ()));
1076
+
1077
+ FacetRating idFacet = facetStats .get ("id" );
1078
+
1079
+ assertThat (idFacet .getMin (), is (equalTo (2.0 )));
1080
+ assertThat (idFacet .getMax (), is (equalTo (5.0 )));
1081
+
1082
+ assertThat (facetDistribution .get ("id" ).get ("2" ), is (equalTo (1 )));
1083
+ assertThat (facetDistribution .get ("id" ).get ("5" ), is (equalTo (1 )));
1084
+
1085
+ assertThat (facetDistribution .get ("title" ).get ("Hobbit" ), is (equalTo (2 )));
1086
+ assertThat (facetDistribution .get ("title" ).get ("The Hobbit" ), is (equalTo (2 )));
1087
+ }
1088
+
934
1089
@ Test
935
1090
public void testSimilarDocuments () throws Exception {
936
1091
HashMap <String , Boolean > features = new HashMap ();
0 commit comments