Skip to content

Commit d4b1ced

Browse files
committed
Modified LinearRetrieverBuilder to propagate top level normalizer to each and every sub level
1 parent 78fa6af commit d4b1ced

File tree

2 files changed

+4
-15
lines changed

2 files changed

+4
-15
lines changed

x-pack/plugin/rank-rrf/src/main/java/org/elasticsearch/xpack/rank/linear/LinearRetrieverBuilder.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import static org.elasticsearch.action.ValidateActions.addValidationError;
4444
import static org.elasticsearch.xcontent.ConstructingObjectParser.optionalConstructorArg;
4545
import static org.elasticsearch.xpack.rank.RankRRFFeatures.LINEAR_RETRIEVER_SUPPORTED;
46+
import static org.elasticsearch.xpack.rank.linear.LinearRetrieverComponent.DEFAULT_NORMALIZER;
4647
import static org.elasticsearch.xpack.rank.linear.LinearRetrieverComponent.DEFAULT_WEIGHT;
4748

4849
/**
@@ -82,17 +83,17 @@ public final class LinearRetrieverBuilder extends CompoundRetrieverBuilder<Linea
8283
List<LinearRetrieverComponent> retrieverComponents = args[0] == null ? List.of() : (List<LinearRetrieverComponent>) args[0];
8384
List<String> fields = (List<String>) args[1];
8485
String query = (String) args[2];
85-
ScoreNormalizer normalizer = args[3] == null ? null : ScoreNormalizer.valueOf((String) args[3]);
86+
ScoreNormalizer normalizer = args[3] == null ? DEFAULT_NORMALIZER : ScoreNormalizer.valueOf((String) args[3]);
8687
int rankWindowSize = args[4] == null ? RankBuilder.DEFAULT_RANK_WINDOW_SIZE : (int) args[4];
8788

8889
int index = 0;
8990
float[] weights = new float[retrieverComponents.size()];
9091
ScoreNormalizer[] normalizers = new ScoreNormalizer[retrieverComponents.size()];
92+
Arrays.fill(normalizers, normalizer);
9193
List<RetrieverSource> innerRetrievers = new ArrayList<>();
9294
for (LinearRetrieverComponent component : retrieverComponents) {
9395
innerRetrievers.add(RetrieverSource.from(component.retriever));
9496
weights[index] = component.weight;
95-
normalizers[index] = component.normalizer;
9697
index++;
9798
}
9899
return new LinearRetrieverBuilder(innerRetrievers, fields, query, normalizer, rankWindowSize, weights, normalizers);
@@ -221,17 +222,6 @@ public ActionRequestValidationException validate(
221222
),
222223
validationException
223224
);
224-
} else if (innerRetrievers.isEmpty() == false && normalizer != null) {
225-
validationException = addValidationError(
226-
String.format(
227-
Locale.ROOT,
228-
"[%s] [%s] cannot be provided when [%s] is specified",
229-
getName(),
230-
NORMALIZER_FIELD.getPreferredName(),
231-
RETRIEVERS_FIELD.getPreferredName()
232-
),
233-
validationException
234-
);
235225
}
236226

237227
return validationException;
@@ -393,7 +383,6 @@ public void doToXContent(XContentBuilder builder, Params params) throws IOExcept
393383
builder.startObject();
394384
builder.field(LinearRetrieverComponent.RETRIEVER_FIELD.getPreferredName(), entry.retriever());
395385
builder.field(LinearRetrieverComponent.WEIGHT_FIELD.getPreferredName(), weights[index]);
396-
builder.field(LinearRetrieverComponent.NORMALIZER_FIELD.getPreferredName(), normalizers[index].getName());
397386
builder.endObject();
398387
index++;
399388
}

x-pack/plugin/rank-rrf/src/main/java/org/elasticsearch/xpack/rank/linear/LinearRetrieverComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class LinearRetrieverComponent implements ToXContentObject {
2525

2626
public static final ParseField RETRIEVER_FIELD = new ParseField("retriever");
2727
public static final ParseField WEIGHT_FIELD = new ParseField("weight");
28-
public static final String DEFAULT_NORMALIZER = IdentityScoreNormalizer.INSTANCE.getName();
28+
public static final ScoreNormalizer DEFAULT_NORMALIZER = IdentityScoreNormalizer.INSTANCE;
2929

3030
static final float DEFAULT_WEIGHT = 1f;
3131

0 commit comments

Comments
 (0)