2020import java .util .ArrayList ;
2121import java .util .HashMap ;
2222import java .util .HashSet ;
23+ import java .util .Map ;
2324import org .junit .jupiter .api .AfterAll ;
2425import org .junit .jupiter .api .BeforeEach ;
2526import org .junit .jupiter .api .Tag ;
@@ -86,8 +87,8 @@ public void testSearchOffset() throws Exception {
8687 SearchRequest searchRequest = SearchRequest .builder ().q ("a" ).offset (20 ).build ();
8788 SearchResult searchResult = (SearchResult ) index .search (searchRequest );
8889
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 )));
9192 }
9293
9394 /** Test search limit */
@@ -105,7 +106,7 @@ public void testSearchLimit() throws Exception {
105106 SearchResult searchResult = (SearchResult ) index .search (searchRequest );
106107
107108 assertThat (searchResult .getHits (), hasSize (2 ));
108- assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (30 )));
109+ assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (31 )));
109110 }
110111
111112 /** Test search attributesToRetrieve */
@@ -310,7 +311,7 @@ public void testSearchWithMatchingStrategy() throws Exception {
310311 SearchResult searchResult = (SearchResult ) index .search (searchRequest );
311312
312313 assertThat (searchResult .getHits (), hasSize (20 ));
313- assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (21 )));
314+ assertThat (searchResult .getEstimatedTotalHits (), is (equalTo (22 )));
314315 }
315316
316317 /** Test search with frequency matching strategy */
@@ -685,12 +686,10 @@ public void testRawSearchSortWithPlaceHolder() throws Exception {
685686 Results resGson = jsonGson .decode (index .rawSearch (searchRequest ), Results .class );
686687
687688 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" )));
694693 }
695694
696695 /** Test search matches */
@@ -728,7 +727,7 @@ public void testSearchPage() throws Exception {
728727 assertThat (searchResult .getHits (), hasSize (20 ));
729728 assertThat (searchResult .getPage (), is (equalTo (1 )));
730729 assertThat (searchResult .getHitsPerPage (), is (equalTo (20 )));
731- assertThat (searchResult .getTotalHits (), is (equalTo (30 )));
730+ assertThat (searchResult .getTotalHits (), is (equalTo (31 )));
732731 assertThat (searchResult .getTotalPages (), is (equalTo (2 )));
733732 }
734733
@@ -749,8 +748,8 @@ public void testSearchPagination() throws Exception {
749748 assertThat (searchResult .getHits (), hasSize (2 ));
750749 assertThat (searchResult .getPage (), is (equalTo (2 )));
751750 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 )));
754753 }
755754
756755 /** Test place holder search */
@@ -931,6 +930,162 @@ public void testMultiSearchWithDistinct() throws Exception {
931930 }
932931 }
933932
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+
9341089 @ Test
9351090 public void testSimilarDocuments () throws Exception {
9361091 HashMap <String , Boolean > features = new HashMap ();
0 commit comments