From 0f32c85e4442e7173d26e09aae05cf79bd24ed2c Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Thu, 10 Jun 2021 00:32:33 +0200 Subject: Wire in sending large rankprofiles as files controlled by feature flag --- .../searchdefinition/derived/RawRankProfile.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'config-model') 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> properties, LargeRankExpressions largeRankExpressions) { + if (!distributeLargeRankExpressions) return; + for (ListIterator> iter = properties.listIterator(); iter.hasNext();) { + Pair 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> deriveRankingPhaseRankProperties(RankingExpression expression, String phase) { List> properties = new ArrayList<>(); if (expression == null) return properties; -- cgit v1.2.3