|
29 | 29 | import org.elasticsearch.xcontent.XContentParser;
|
30 | 30 | import org.elasticsearch.xpack.core.XPackPlugin;
|
31 | 31 | import org.elasticsearch.xpack.rank.MultiFieldsInnerRetrieverUtils;
|
32 |
| -import org.elasticsearch.xpack.rank.linear.LinearRetrieverComponent; |
33 | 32 |
|
34 | 33 | import java.io.IOException;
|
35 | 34 | import java.util.ArrayList;
|
|
40 | 39 |
|
41 | 40 | import static org.elasticsearch.action.ValidateActions.addValidationError;
|
42 | 41 | import static org.elasticsearch.xpack.rank.rrf.RRFRetrieverComponent.DEFAULT_WEIGHT;
|
43 |
| -import static org.elasticsearch.xpack.rank.rrf.RRFRetrieverComponent.RETRIEVER_FIELD; |
44 | 42 |
|
45 | 43 | /**
|
46 | 44 | * An rrf retriever is used to represent an rrf rank element, but
|
@@ -292,12 +290,15 @@ protected RetrieverBuilder doRewrite(QueryRewriteContext ctx) {
|
292 | 290 | if (fieldsInnerRetrievers.isEmpty() == false) {
|
293 | 291 | // TODO: This is a incomplete solution as it does not address other incomplete copy issues
|
294 | 292 | // (such as dropping the retriever name and min score)
|
295 |
| - RRFRetrieverBuilder generated = (RRFRetrieverBuilder) fieldsInnerRetrievers.get(0); |
296 |
| - rewritten = new RRFRetrieverBuilder(generated.innerRetrievers, null, null, rankWindowSize, rankConstant, generated.weights); |
| 293 | + List<CompoundRetrieverBuilder.RetrieverSource> sources = new ArrayList<>(); |
| 294 | + float[] weights = new float[fieldsInnerRetrievers.size()]; |
| 295 | + Arrays.fill(weights, RRFRetrieverComponent.DEFAULT_WEIGHT); |
| 296 | + for (int i = 0; i < fieldsInnerRetrievers.size(); i++) { |
| 297 | + sources.add(CompoundRetrieverBuilder.RetrieverSource.from(fieldsInnerRetrievers.get(i))); |
| 298 | + weights[i] = RRFRetrieverComponent.DEFAULT_WEIGHT; |
| 299 | + } |
| 300 | + rewritten = new RRFRetrieverBuilder(sources, null, null, rankWindowSize, rankConstant, weights); |
297 | 301 | rewritten.getPreFilterQueryBuilders().addAll(preFilterQueryBuilders);
|
298 |
| - } else { |
299 |
| - // Inner retriever list can be empty when using an index wildcard pattern that doesn't match any indices |
300 |
| - rewritten = new StandardRetrieverBuilder(new MatchNoneQueryBuilder()); |
301 | 302 | }
|
302 | 303 | }
|
303 | 304 |
|
|
0 commit comments