aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-05-24 16:06:01 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2021-05-25 14:09:42 +0200
commit38d5528de104e756dbc2d322211d935982b836be (patch)
tree7871f054424d485d27e169002d8d65b4ba516d30 /config-model/src/main
parent6067d082653ab2994a80ccdaeca72bdf46e65e10 (diff)
Use external rank expressions, gated by feature flag.
Diffstat (limited to 'config-model/src/main')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java7
2 files changed, 12 insertions, 1 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
index 3f77e2010ec..5f21e15b780 100644
--- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
+++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
@@ -53,6 +53,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
private double feedConcurrency = 0.5;
private boolean useBucketExecutorForPruneRemoved;
private boolean enableFeedBlockInDistributor = true;
+ private boolean useExternalRankExpression = false;
private int clusterControllerMaxHeapSizeInMb = 128;
private int metricsProxyMaxHeapSizeInMb = 256;
private int maxActivationInhibitedOutOfSyncGroups = 0;
@@ -101,7 +102,12 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
@Override public int numDistributorStripes() { return numDistributorStripes; }
@Override public boolean allowDisableMtls() { return allowDisableMtls; }
@Override public List<X509Certificate> operatorCertificates() { return operatorCertificates; }
+ @Override public boolean useExternalRankExpressions() { return useExternalRankExpression; }
+ public TestProperties useExternalRankExpression(boolean value) {
+ useExternalRankExpression = value;
+ return this;
+ }
public TestProperties setFeedConcurrency(double feedConcurrency) {
this.feedConcurrency = feedConcurrency;
return this;
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java
index a829989a281..69e3c311e8f 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java
@@ -159,6 +159,7 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
private final Map<String, String> attributeTypes;
private final Map<String, String> queryFeatureTypes;
+ private final boolean useExternalExpressionFiles;
private Set<String> filterFields = new java.util.LinkedHashSet<>();
@@ -172,6 +173,7 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
RankProfile compiled = rankProfile.compile(queryProfiles, importedModels);
attributeTypes = compiled.getAttributeTypes();
queryFeatureTypes = compiled.getQueryFeatureTypes();
+ useExternalExpressionFiles = deployProperties.featureFlags().useExternalRankExpressions();
deriveRankingFeatures(compiled, deployProperties);
deriveRankTypeSetting(compiled, attributeFields);
deriveFilterFields(compiled);
@@ -231,6 +233,7 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
Map<String, String> functionProperties) {
SerializationContext context = new SerializationContext(functionExpressions, null, functionProperties);
for (Map.Entry<String, RankProfile.RankingExpressionFunction> e : functions.entrySet()) {
+ if (useExternalExpressionFiles && rankProfile.getExpressionFile(e.getKey()) != null) continue;
String propertyName = RankingExpression.propertyName(e.getKey());
if (context.serializedFunctions().containsKey(propertyName)) continue;
@@ -428,7 +431,9 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
if ("".equals(name))
name = phase;
- if (expression.getRoot() instanceof ReferenceNode) {
+ if (useExternalExpressionFiles && (fileName != null)) {
+ properties.add(new Pair<>("vespa.rank." + phase, "rankingExpression(" + name + ")"));
+ } else if (expression.getRoot() instanceof ReferenceNode) {
properties.add(new Pair<>("vespa.rank." + phase, expression.getRoot().toString()));
} else {
properties.add(new Pair<>("vespa.rank." + phase, "rankingExpression(" + name + ")"));