2626import org .elasticsearch .search .retriever .StandardRetrieverBuilder ;
2727import org .elasticsearch .test .ESTestCase ;
2828
29+ import java .util .HashMap ;
2930import java .util .HashSet ;
3031import java .util .List ;
3132import java .util .Map ;
@@ -39,7 +40,7 @@ public class LinearRetrieverBuilderTests extends ESTestCase {
3940 public void testSimplifiedParamsRewrite () {
4041 final String indexName = "test-index" ;
4142 final List <String > testInferenceFields = List .of ("semantic_field_1" , "semantic_field_2" );
42- final ResolvedIndices resolvedIndices = createMockResolvedIndices (indexName , testInferenceFields );
43+ final ResolvedIndices resolvedIndices = createMockResolvedIndices (indexName , testInferenceFields , null );
4344 final QueryRewriteContext queryRewriteContext = new QueryRewriteContext (
4445 parserConfig (),
4546 null ,
@@ -145,8 +146,41 @@ public void testSimplifiedParamsRewrite() {
145146 );
146147 }
147148
148- private static ResolvedIndices createMockResolvedIndices (String indexName , List <String > inferenceFields ) {
149- Index index = new Index (indexName , randomAlphaOfLength (10 ));
149+ public void testSearchRemoteIndex () {
150+ final ResolvedIndices resolvedIndices = createMockResolvedIndices (
151+ "local-index" ,
152+ List .of (),
153+ Map .of ("remote-cluster" , "remote-index" )
154+ );
155+ final QueryRewriteContext queryRewriteContext = new QueryRewriteContext (
156+ parserConfig (),
157+ null ,
158+ null ,
159+ resolvedIndices ,
160+ new PointInTimeBuilder (new BytesArray ("pitid" )),
161+ null
162+ );
163+
164+ LinearRetrieverBuilder retriever = new LinearRetrieverBuilder (
165+ null ,
166+ null ,
167+ "foo" ,
168+ MinMaxScoreNormalizer .INSTANCE ,
169+ DEFAULT_RANK_WINDOW_SIZE ,
170+ new float [0 ],
171+ new ScoreNormalizer [0 ]
172+ );
173+
174+ IllegalArgumentException iae = expectThrows (IllegalArgumentException .class , () -> retriever .doRewrite (queryRewriteContext ));
175+ assertEquals ("[linear] does not support the simplified query format when querying remote indices" , iae .getMessage ());
176+ }
177+
178+ private static ResolvedIndices createMockResolvedIndices (
179+ String localIndexName ,
180+ List <String > inferenceFields ,
181+ Map <String , String > remoteIndexNames
182+ ) {
183+ Index index = new Index (localIndexName , randomAlphaOfLength (10 ));
150184 IndexMetadata .Builder indexMetadataBuilder = IndexMetadata .builder (index .getName ())
151185 .settings (
152186 Settings .builder ()
@@ -162,9 +196,16 @@ private static ResolvedIndices createMockResolvedIndices(String indexName, List<
162196 );
163197 }
164198
199+ Map <String , OriginalIndices > remoteIndices = new HashMap <>();
200+ if (remoteIndexNames != null ) {
201+ for (Map .Entry <String , String > entry : remoteIndexNames .entrySet ()) {
202+ remoteIndices .put (entry .getKey (), new OriginalIndices (new String [] { entry .getValue () }, IndicesOptions .DEFAULT ));
203+ }
204+ }
205+
165206 return new MockResolvedIndices (
166- Map . of () ,
167- new OriginalIndices (new String [] { indexName }, IndicesOptions .DEFAULT ),
207+ remoteIndices ,
208+ new OriginalIndices (new String [] { localIndexName }, IndicesOptions .DEFAULT ),
168209 Map .of (index , indexMetadataBuilder .build ())
169210 );
170211 }
0 commit comments