@@ -129,7 +129,7 @@ private void normalizeNormalizerArray(ScoreNormalizer topLevelNormalizer, ScoreN
129129
130130 if (topLevelNormalizer != null ) {
131131 // Validate explicit per-retriever normalizers match top-level
132- if (current != null && ! current .equals (DEFAULT_NORMALIZER ) && ! current .equals (topLevelNormalizer )) {
132+ if (current != null && current .equals (DEFAULT_NORMALIZER ) == false && current .equals (topLevelNormalizer ) == false ) {
133133 throw new IllegalArgumentException (
134134 String .format (
135135 "[%s] All per-retriever normalizers must match the top-level normalizer: "
@@ -189,39 +189,23 @@ public LinearRetrieverBuilder(
189189 // Use a mutable list for innerRetrievers so that we can use addChild
190190 super (innerRetrievers == null ? new ArrayList <>() : new ArrayList <>(innerRetrievers ), rankWindowSize );
191191 if (weights .length != this .innerRetrievers .size ()) {
192- throw new IllegalArgumentException (
193- "["
194- + NAME
195- + "] the number of weights must be equal to the number of retrievers, but found ["
196- + weights .length
197- + "] weights and ["
198- + this .innerRetrievers .size ()
199- + "] retrievers"
200- );
192+ throw new IllegalArgumentException ("The number of weights must match the number of inner retrievers" );
201193 }
202194 if (normalizers .length != this .innerRetrievers .size ()) {
203- throw new IllegalArgumentException (
204- "["
205- + NAME
206- + "] the number of normalizers must be equal to the number of retrievers, but found ["
207- + normalizers .length
208- + "] normalizers and ["
209- + this .innerRetrievers .size ()
210- + "] retrievers"
211- );
195+ throw new IllegalArgumentException ("The number of normalizers must match the number of inner retrievers" );
212196 }
197+
198+ this .fields = fields == null ? null : List .copyOf (fields );
199+ this .query = query ;
200+ this .normalizer = normalizer ;
213201 this .weights = weights ;
214202 this .normalizers = normalizers ;
215- // Apply top-level normalizer priority system:
216- // 1. Retriever-specific override (if specified)
217- // 2. Top-level normalizer (if specified)
218- // 3. Default (IdentityScoreNormalizer.INSTANCE)
203+
219204 ScoreNormalizer effectiveNormalizer = normalizer != null ? normalizer : DEFAULT_NORMALIZER ;
220205 for (int i = 0 ; i < normalizers .length ; i ++) {
221206 if (normalizers [i ] == null || normalizers [i ].equals (DEFAULT_NORMALIZER )) {
222207 normalizers [i ] = effectiveNormalizer ;
223208 }
224- // If per-retriever normalizer is explicitly specified, keep it (allow override)
225209 }
226210 }
227211
@@ -411,34 +395,6 @@ protected RetrieverBuilder doRewrite(QueryRewriteContext ctx) {
411395 rewritten = new StandardRetrieverBuilder (new MatchNoneQueryBuilder ());
412396 }
413397 }
414- if (rewritten instanceof LinearRetrieverBuilder == false ) {
415- return rewritten ;
416- }
417- LinearRetrieverBuilder linearRewritten = (LinearRetrieverBuilder ) rewritten ;
418-
419- if (normalizer != null ) {
420- ScoreNormalizer [] newNormalizers = new ScoreNormalizer [linearRewritten .normalizers .length ];
421- Arrays .fill (newNormalizers , normalizer );
422- rewritten = new LinearRetrieverBuilder (
423- linearRewritten .innerRetrievers ,
424- linearRewritten .fields ,
425- linearRewritten .query ,
426- normalizer ,
427- linearRewritten .rankWindowSize ,
428- linearRewritten .weights ,
429- newNormalizers
430- );
431- } else {
432- rewritten = new LinearRetrieverBuilder (
433- linearRewritten .innerRetrievers ,
434- linearRewritten .fields ,
435- linearRewritten .query ,
436- linearRewritten .normalizer ,
437- linearRewritten .rankWindowSize ,
438- linearRewritten .weights ,
439- linearRewritten .normalizers
440- );
441- }
442398
443399 return rewritten ;
444400 }
0 commit comments