diff options
author | Harald Musum <musum@verizonmedia.com> | 2021-07-02 15:49:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-02 15:49:15 +0200 |
commit | 910fbc28f104b7203ae123801b51b9a7cd03b886 (patch) | |
tree | c7606b5f826b4151911872ede55952dd2dc9a140 | |
parent | 4e17c05f9a0af9ecd4d5f5c081af2e32943ce418 (diff) | |
parent | 0f32c85e4442e7173d26e09aae05cf79bd24ed2c (diff) |
Merge pull request #18520 from vespa-engine/balder/wire-in-large-rank-expressions-as-files
Wire in sending large rankprofiles as files controlled by feature flag
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java | 20 |
1 files changed, 20 insertions, 0 deletions
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 97d695cead9..508d011d18f 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 @@ -417,9 +417,29 @@ public class RawRankProfile implements RankProfilesConfig.Producer { properties.add(new Pair<>("vespa.type.query." + queryFeatureType.getKey(), queryFeatureType.getValue())); } if (properties.size() >= 1000000) throw new RuntimeException("Too many rank properties"); + distributeLargeExpressionsAsFiles(properties, largeRankExpressions); return properties; } + private void distributeLargeExpressionsAsFiles(List<Pair<String, String>> properties, LargeRankExpressions largeRankExpressions) { + if (!distributeLargeRankExpressions) return; + for (ListIterator<Pair<String, String>> iter = properties.listIterator(); iter.hasNext();) { + Pair<String, String> property = iter.next(); + String expression = property.getSecond(); + if (expression.length() > largeRankExpressionLimit) { + String propertyName = property.getFirst(); + String functionName = RankingExpression.extractScriptName(propertyName); + if (functionName != null) { + String mangledName = rankprofileName + "." + functionName; + largeRankExpressions.add(new RankExpressionBody(mangledName, ByteBuffer.wrap(expression.getBytes(StandardCharsets.UTF_8)))); + if (useDistributedRankExpressions) { + iter.set(new Pair<>(RankingExpression.propertyExpressionName(functionName), mangledName)); + } + } + } + } + } + private List<Pair<String, String>> deriveRankingPhaseRankProperties(RankingExpression expression, String phase) { List<Pair<String, String>> properties = new ArrayList<>(); if (expression == null) return properties; |