88
99package org .opensearch .search .query ;
1010
11+ import org .opensearch .common .settings .ClusterSettings ;
12+ import org .opensearch .common .settings .Settings ;
1113import org .opensearch .index .query .BoolQueryBuilder ;
1214import org .opensearch .index .query .MatchAllQueryBuilder ;
1315import org .opensearch .index .query .QueryBuilder ;
1416import org .opensearch .index .query .QueryBuilders ;
1517import org .opensearch .index .query .QueryShardContext ;
1618import org .opensearch .index .query .RangeQueryBuilder ;
1719import org .opensearch .index .query .TermQueryBuilder ;
20+ import org .opensearch .search .SearchService ;
1821import org .opensearch .test .OpenSearchTestCase ;
1922
2023import static org .hamcrest .Matchers .equalTo ;
@@ -25,6 +28,18 @@ public class QueryRewriterRegistryTests extends OpenSearchTestCase {
2528
2629 private final QueryShardContext context = mock (QueryShardContext .class );
2730
31+ @ Override
32+ public void setUp () throws Exception {
33+ super .setUp ();
34+ // Initialize registry with default settings
35+ Settings settings = Settings .builder ()
36+ .put (SearchService .QUERY_REWRITING_ENABLED_SETTING .getKey (), true )
37+ .put (SearchService .QUERY_REWRITING_TERMS_THRESHOLD_SETTING .getKey (), 16 )
38+ .build ();
39+ ClusterSettings clusterSettings = new ClusterSettings (settings , ClusterSettings .BUILT_IN_CLUSTER_SETTINGS );
40+ QueryRewriterRegistry .initialize (settings , clusterSettings );
41+ }
42+
2843 public void testCompleteRewritingPipeline () {
2944 // Test that all rewriters work together correctly
3045 QueryBuilder nestedBool = QueryBuilders .boolQuery ()
@@ -38,7 +53,7 @@ public void testCompleteRewritingPipeline() {
3853 .filter (QueryBuilders .termQuery ("type" , "product" ))
3954 .filter (QueryBuilders .termQuery ("type" , "service" ));
4055
41- QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context , true );
56+ QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context );
4257 assertThat (rewritten , instanceOf (BoolQueryBuilder .class ));
4358 BoolQueryBuilder rewrittenBool = (BoolQueryBuilder ) rewritten ;
4459
@@ -56,18 +71,31 @@ public void testCompleteRewritingPipeline() {
5671 }
5772
5873 public void testDisabledRewriting () {
59- // When disabled, query should not be modified
74+ // Test disabled rewriting via settings
75+ Settings settings = Settings .builder ().put (SearchService .QUERY_REWRITING_ENABLED_SETTING .getKey (), false ).build ();
76+ ClusterSettings clusterSettings = new ClusterSettings (settings , ClusterSettings .BUILT_IN_CLUSTER_SETTINGS );
77+
78+ // Initialize with disabled setting
79+ QueryRewriterRegistry .initialize (settings , clusterSettings );
80+
6081 QueryBuilder query = QueryBuilders .boolQuery ()
6182 .must (QueryBuilders .matchAllQuery ())
6283 .filter (QueryBuilders .termQuery ("field" , "value" ));
6384
64- QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context , false );
85+ QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context );
6586 assertSame (query , rewritten );
87+
88+ // Enable via settings update
89+ clusterSettings .applySettings (Settings .builder ().put (SearchService .QUERY_REWRITING_ENABLED_SETTING .getKey (), true ).build ());
90+
91+ // Now it should rewrite
92+ QueryBuilder rewritten2 = QueryRewriterRegistry .rewrite (query , context );
93+ assertNotSame (query , rewritten2 );
6694 }
6795
6896 public void testNullQuery () {
6997 // Null query should return null
70- QueryBuilder rewritten = QueryRewriterRegistry .rewrite (null , context , true );
98+ QueryBuilder rewritten = QueryRewriterRegistry .rewrite (null , context );
7199 assertNull (rewritten );
72100 }
73101
@@ -82,7 +110,7 @@ public void testRewriterPriorityOrder() {
82110 .must (QueryBuilders .termQuery ("field" , "value2" ))
83111 );
84112
85- QueryBuilder rewritten = QueryRewriterRegistry .rewrite (deeplyNested , context , true );
113+ QueryBuilder rewritten = QueryRewriterRegistry .rewrite (deeplyNested , context );
86114 assertThat (rewritten , instanceOf (BoolQueryBuilder .class ));
87115 BoolQueryBuilder rewrittenBool = (BoolQueryBuilder ) rewritten ;
88116
@@ -113,7 +141,7 @@ public void testComplexRealWorldQuery() {
113141 .must (QueryBuilders .rangeQuery ("price" ).gte (500 ).lte (2000 ))
114142 .mustNot (QueryBuilders .termQuery ("status" , "discontinued" ));
115143
116- QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context , true );
144+ QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context );
117145 assertThat (rewritten , instanceOf (BoolQueryBuilder .class ));
118146 BoolQueryBuilder rewrittenBool = (BoolQueryBuilder ) rewritten ;
119147
@@ -155,7 +183,7 @@ public void testPerformanceMetrics() {
155183 .filter (QueryBuilders .matchAllQuery ());
156184
157185 // Should not throw any exceptions
158- QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context , true );
186+ QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context );
159187 assertNotNull (rewritten );
160188 }
161189
@@ -167,7 +195,7 @@ public void testRewriterErrorHandling() {
167195 .filter (QueryBuilders .matchAllQuery ());
168196
169197 // Even if one rewriter fails, others should still be applied
170- QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context , true );
198+ QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context );
171199 assertNotNull (rewritten );
172200 }
173201
@@ -202,7 +230,7 @@ public void testVeryComplexMixedQuery() {
202230 .mustNot (QueryBuilders .boolQuery ().must (QueryBuilders .termQuery ("archived" , "true" )))
203231 .minimumShouldMatch (1 );
204232
205- QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context , true );
233+ QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context );
206234 assertThat (rewritten , instanceOf (BoolQueryBuilder .class ));
207235 BoolQueryBuilder result = (BoolQueryBuilder ) rewritten ;
208236
@@ -286,7 +314,7 @@ public String name() {
286314 .must (QueryBuilders .termQuery ("test_field" , "test_value" ))
287315 .filter (QueryBuilders .termQuery ("other_field" , "other_value" ));
288316
289- QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context , true );
317+ QueryBuilder rewritten = QueryRewriterRegistry .rewrite (query , context );
290318 assertThat (rewritten , instanceOf (BoolQueryBuilder .class ));
291319 BoolQueryBuilder rewrittenBool = (BoolQueryBuilder ) rewritten ;
292320
0 commit comments