diff options
author | Arne Juul <arnej@yahooinc.com> | 2023-03-17 10:32:08 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahooinc.com> | 2023-03-20 10:02:55 +0000 |
commit | 8ab3f0d995666384080e9d1a44df2eac01efca31 (patch) | |
tree | 9ba74263515798dcf8367798001310041f16bf43 /config-model/src/main/java/com | |
parent | a01b0d47680947b0b253fdfc484faf543a000cf6 (diff) |
- avoid unintentionally duplicated rank-properties
- use more LinkedHashMap for deterministic behavior in unit tests
- extend some unit tests
Diffstat (limited to 'config-model/src/main/java/com')
-rw-r--r-- | config-model/src/main/java/com/yahoo/schema/RankProfile.java | 21 | ||||
-rw-r--r-- | config-model/src/main/java/com/yahoo/schema/expressiontransforms/RankProfileTransformContext.java | 4 |
2 files changed, 22 insertions, 3 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/RankProfile.java b/config-model/src/main/java/com/yahoo/schema/RankProfile.java index f9b3bc77040..639930041c3 100644 --- a/config-model/src/main/java/com/yahoo/schema/RankProfile.java +++ b/config-model/src/main/java/com/yahoo/schema/RankProfile.java @@ -683,6 +683,25 @@ public class RankProfile implements Cloneable { addRankProperty(new RankProperty(name, parameter)); } + /* + * set a rank-property that should be a single-value parameter; + * if the same name is used multiple times, that parameter must be identical each time. + */ + public void setRankProperty(String name, String parameter) { + var old = rankProperties.get(name); + if (old != null) { + if (old.size() != 1) { + throw new IllegalStateException("setRankProperty used for multi-valued property " + name); + } + var oldVal = old.get(0).getValue(); + if (! oldVal.equals(parameter)) { + throw new IllegalArgumentException("setRankProperty would change property " + name + " from " + oldVal + " to " + parameter); + } + } else { + addRankProperty(new RankProperty(name, parameter)); + } + } + private void addRankProperty(RankProperty rankProperty) { // Just the usual multimap semantics here rankProperties.computeIfAbsent(rankProperty.getName(), (String key) -> new ArrayList<>(1)).add(rankProperty); @@ -1091,7 +1110,7 @@ public class RankProfile implements Cloneable { inlineFunctions); RankingExpression expression = expressionTransforms.transform(function.function().getBody(), context); for (Map.Entry<String, String> rankProperty : context.rankProperties().entrySet()) { - addRankProperty(rankProperty.getKey(), rankProperty.getValue()); + setRankProperty(rankProperty.getKey(), rankProperty.getValue()); } return function.withExpression(expression); } diff --git a/config-model/src/main/java/com/yahoo/schema/expressiontransforms/RankProfileTransformContext.java b/config-model/src/main/java/com/yahoo/schema/expressiontransforms/RankProfileTransformContext.java index cfc859345ad..890fa5e7a10 100644 --- a/config-model/src/main/java/com/yahoo/schema/expressiontransforms/RankProfileTransformContext.java +++ b/config-model/src/main/java/com/yahoo/schema/expressiontransforms/RankProfileTransformContext.java @@ -12,7 +12,7 @@ import com.yahoo.searchlib.rankingexpression.transform.TransformContext; import com.yahoo.tensor.Tensor; import com.yahoo.tensor.TensorType; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Collectors; @@ -27,7 +27,7 @@ public class RankProfileTransformContext extends TransformContext { private final QueryProfileRegistry queryProfiles; private final ImportedMlModels importedModels; private final Map<String, RankProfile.RankingExpressionFunction> inlineFunctions; - private final Map<String, String> rankProperties = new HashMap<>(); + private final Map<String, String> rankProperties = new LinkedHashMap<>(); public RankProfileTransformContext(RankProfile rankProfile, QueryProfileRegistry queryProfiles, |