1515import java .util .Collection ;
1616import java .util .List ;
1717
18+ import static org .elasticsearch .index .query .QueryBuilders .boolQuery ;
19+ import static org .elasticsearch .index .query .QueryBuilders .matchQuery ;
20+ import static org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertHitCount ;
21+ import static org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertNoFailuresAndResponse ;
22+
1823public class TextSimilarityRankMultiNodeTests extends AbstractRerankerIT {
1924
2025 private static final String inferenceId = "inference-id" ;
@@ -28,13 +33,22 @@ protected RankBuilder getRankBuilder(int rankWindowSize, String rankFeatureField
2833
2934 @ Override
3035 protected RankBuilder getThrowingRankBuilder (int rankWindowSize , String rankFeatureField , ThrowingRankBuilderType type ) {
36+ return getThrowingRankBuilder (rankWindowSize , rankFeatureField , type , false );
37+ }
38+
39+ protected RankBuilder getThrowingRankBuilder (
40+ int rankWindowSize ,
41+ String rankFeatureField ,
42+ ThrowingRankBuilderType type ,
43+ boolean failuresAllowed
44+ ) {
3145 return new TextSimilarityTestPlugin .ThrowingMockRequestActionBasedRankBuilder (
3246 rankWindowSize ,
3347 rankFeatureField ,
3448 inferenceId ,
3549 inferenceText ,
3650 minScore ,
37- false ,
51+ failuresAllowed ,
3852 type .name ()
3953 );
4054 }
@@ -52,6 +66,50 @@ public void testQueryPhaseCoordinatorThrowingAllShardsFail() throws Exception {
5266 // no-op
5367 }
5468
69+ public void testRerankerAllowedFailureNoExceptions () throws Exception {
70+ final String indexName = "test_index" ;
71+ final String rankFeatureField = "rankFeatureField" ;
72+ final String searchField = "searchField" ;
73+ final int rankWindowSize = 10 ;
74+
75+ createIndex (indexName );
76+ indexRandom (
77+ true ,
78+ prepareIndex (indexName ).setId ("1" ).setSource (rankFeatureField , 0.1 , searchField , "A" ),
79+ prepareIndex (indexName ).setId ("2" ).setSource (rankFeatureField , 0.2 , searchField , "B" ),
80+ prepareIndex (indexName ).setId ("3" ).setSource (rankFeatureField , 0.3 , searchField , "C" ),
81+ prepareIndex (indexName ).setId ("4" ).setSource (rankFeatureField , 0.4 , searchField , "D" ),
82+ prepareIndex (indexName ).setId ("5" ).setSource (rankFeatureField , 0.5 , searchField , "E" )
83+ );
84+
85+ assertNoFailuresAndResponse (
86+ prepareSearch ().setQuery (
87+ boolQuery ().should (matchQuery (searchField , "A" ))
88+ .should (matchQuery (searchField , "B" ))
89+ .should (matchQuery (searchField , "C" ))
90+ .should (matchQuery (searchField , "D" ))
91+ .should (matchQuery (searchField , "E" ))
92+ )
93+ .setRankBuilder (
94+ getThrowingRankBuilder (
95+ rankWindowSize ,
96+ rankFeatureField ,
97+ ThrowingRankBuilderType .THROWING_RANK_FEATURE_PHASE_COORDINATOR_CONTEXT ,
98+ true
99+ )
100+ )
101+ .addFetchField (searchField )
102+ .setTrackTotalHits (true )
103+ .setAllowPartialSearchResults (true )
104+ .setSize (10 ),
105+ response -> {
106+ // just check it returns 5 documents, the order will be random due to not getting reranked
107+ assertHitCount (response , 5L );
108+ }
109+ );
110+ assertNoOpenContext (indexName );
111+ }
112+
55113 @ Override
56114 protected boolean shouldCheckScores () {
57115 return false ;
0 commit comments