summaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-04-05 21:28:52 +0200
committerJon Bratseth <bratseth@gmail.com>2022-04-05 21:28:52 +0200
commita9e01024cd979c748ba7f60560549f3dda9113ab (patch)
tree1a9a8a8c9de5608781bb75bfe94c038027c5e8e8 /config-model/src
parent1f55e277b55215f00fc1bafccb851369e28e4cd5 (diff)
Support input in intermediate parser
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedRanking.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedRankProfile.java15
-rw-r--r--config-model/src/main/javacc/IntermediateParser.jj30
-rw-r--r--config-model/src/main/javacc/SDParser.jj2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java2
5 files changed, 46 insertions, 7 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedRanking.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedRanking.java
index 4b8830ca811..d151776dd85 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedRanking.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ConvertParsedRanking.java
@@ -54,6 +54,10 @@ public class ConvertParsedRanking {
}
}
+ for (var input : parsed.getInputs().entrySet()) {
+ profile.addInput(input.getKey(), input.getValue());
+ }
+
for (var func : parsed.getFunctions()) {
String name = func.name();
List<String> parameters = func.getParameters();
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedRankProfile.java
index f028685b71a..fcb5426de87 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedRankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedRankProfile.java
@@ -4,8 +4,10 @@ package com.yahoo.searchdefinition.parser;
import com.yahoo.searchdefinition.RankProfile.MatchPhaseSettings;
import com.yahoo.searchdefinition.RankProfile.MutateOperation;
import com.yahoo.searchlib.rankingexpression.FeatureList;
+import com.yahoo.searchlib.rankingexpression.Reference;
import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue;
import com.yahoo.searchlib.rankingexpression.evaluation.Value;
+import com.yahoo.tensor.TensorType;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -25,9 +27,9 @@ class ParsedRankProfile extends ParsedBlock {
private boolean ignoreDefaultRankFeatures = false;
private Double rankScoreDropLimit = null;
private Double termwiseLimit = null;
- private List<FeatureList> matchFeatures = new ArrayList<>();
- private List<FeatureList> rankFeatures = new ArrayList<>();
- private List<FeatureList> summaryFeatures = new ArrayList<>();
+ private final List<FeatureList> matchFeatures = new ArrayList<>();
+ private final List<FeatureList> rankFeatures = new ArrayList<>();
+ private final List<FeatureList> summaryFeatures = new ArrayList<>();
private Integer keepRankCount = null;
private Integer minHitsPerThread = null;
private Integer numSearchPartitions = null;
@@ -47,6 +49,7 @@ class ParsedRankProfile extends ParsedBlock {
private final Map<String, String> fieldsRankType = new LinkedHashMap<>();
private final Map<String, List<String>> rankProperties = new LinkedHashMap<>();
private final Map<String, Value> constants = new LinkedHashMap<>();
+ private final Map<Reference, TensorType> inputs = new LinkedHashMap<>();
ParsedRankProfile(String name) {
super(name, "rank-profile");
@@ -74,6 +77,7 @@ class ParsedRankProfile extends ParsedBlock {
Map<String, String> getFieldsWithRankType() { return Map.copyOf(fieldsRankType); }
Map<String, List<String>> getRankProperties() { return Map.copyOf(rankProperties); }
Map<String, Value> getConstants() { return Map.copyOf(constants); }
+ Map<Reference, TensorType> getInputs() { return Map.copyOf(inputs); }
Optional<String> getInheritedSummaryFeatures() { return Optional.ofNullable(this.inheritedSummaryFeatures); }
Optional<String> getSecondPhaseExpression() { return Optional.ofNullable(this.secondPhaseExpression); }
Optional<Boolean> isStrict() { return Optional.ofNullable(this.strict); }
@@ -99,6 +103,11 @@ class ParsedRankProfile extends ParsedBlock {
constants.put(name, value);
}
+ void addInput(Reference name, TensorType type) {
+ verifyThat(! inputs.containsKey(name), "already has input", name);
+ inputs.put(name, type);
+ }
+
void addFieldRankFilter(String field, boolean filter) {
fieldsRankFilter.put(field, filter);
}
diff --git a/config-model/src/main/javacc/IntermediateParser.jj b/config-model/src/main/javacc/IntermediateParser.jj
index 6119eb5e2ce..68b11178cc2 100644
--- a/config-model/src/main/javacc/IntermediateParser.jj
+++ b/config-model/src/main/javacc/IntermediateParser.jj
@@ -39,6 +39,7 @@ import com.yahoo.searchdefinition.document.Stemming;
import com.yahoo.searchdefinition.document.SDField;
import com.yahoo.searchdefinition.fieldoperation.IndexingOperation;
import com.yahoo.searchlib.rankingexpression.FeatureList;
+import com.yahoo.searchlib.rankingexpression.Reference;
import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue;
import com.yahoo.searchlib.rankingexpression.evaluation.Value;
import com.yahoo.tensor.Tensor;
@@ -174,6 +175,7 @@ TOKEN :
| < WEIGHT: "weight" >
| < TYPE: "type" >
| < INDEX: "index" >
+| < INPUTS: "inputs">
| < MTOKEN: "token" >
| < TEXT: "text" >
| < WORD: "word" >
@@ -187,6 +189,7 @@ TOKEN :
| < ONNXMODEL: "onnx-model">
| < MODEL: "model" >
| < MUTATE: "mutate" >
+| < QUERY: "query" >
| < RANKPROFILE: "rank-profile" >
| < RANKDEGRADATIONFREQ: "rank-degradation-frequency" >
| < RANKDEGRADATION: "rank-degradation" >
@@ -1832,6 +1835,7 @@ void rankProfileItem(ParsedRankProfile profile) : { }
| rankProperties(profile)
| secondPhase(profile)
| rankDegradation()
+ | inputs(profile)
| constants(profile)
| matchFeatures(profile)
| summaryFeatures(profile)
@@ -2048,6 +2052,26 @@ void secondPhaseItem(ParsedRankProfile profile) :
)
}
+/** Consumes an inputs block of a rank profile. */
+void inputs(ParsedRankProfile profile) :
+{
+ Reference reference;
+ TensorType type;
+}
+{
+ <INPUTS> <LBRACE> (<NL>)*
+ ( reference = queryFeature() <COLON> type = tensorType("Type of " + reference) { profile.addInput(reference, type); } (<NL>)*) *
+ <RBRACE>
+}
+
+Reference queryFeature() :
+{
+ String argument;
+}
+{
+ <QUERY> "(" argument = identifier() ")"
+ { return Reference.simple("query", argument); }
+}
/**
* This rule consumes a summary-features block of a rank profile.
@@ -2488,6 +2512,8 @@ String identifier() : { }
| <COMPRESSION>
| <COMPRESSIONLEVEL>
| <COMPRESSIONTHRESHOLD>
+ | <CONSTANT>
+ | <CONSTANTS>
| <CONTEXT>
| <CREATEIFNONEXISTENT>
| <DENSEPOSTINGLISTTHRESHOLD>
@@ -2526,6 +2552,8 @@ String identifier() : { }
| <INDEXING>
| <INDEXINGREWRITE>
| <INHERITS>
+ | <INLINE>
+ | <INPUTS>
| <INTEGER>
| <KEEPRANKCOUNT>
| <LITERAL>
@@ -2601,8 +2629,6 @@ String identifier() : { }
| <WEIGHT>
| <WEIGHTEDSET>
| <WORD>
- | <INLINE>
- | <CONSTANTS>
)
{ return token.image; }
}
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 724239fc9b7..c0a7113239e 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -44,9 +44,9 @@ import com.yahoo.searchdefinition.DocumentOnlySchema;
import com.yahoo.searchdefinition.UnrankedRankProfile;
import com.yahoo.searchdefinition.fieldoperation.*;
import com.yahoo.searchlib.rankingexpression.FeatureList;
+import com.yahoo.searchlib.rankingexpression.Reference;
import com.yahoo.searchlib.rankingexpression.evaluation.Value;
import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue;
-import com.yahoo.searchlib.rankingexpression.Reference;
import com.yahoo.tensor.Tensor;
import com.yahoo.tensor.TensorType;
import com.yahoo.vespa.documentmodel.DocumentSummary;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java
index dbffd4dde37..1079f1986b2 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java
@@ -229,7 +229,7 @@ public class DocumentDatabaseTestCase {
assertEquals(attributeField, acfg.attribute(0).name());
assertEquals(attributeField+"_nfa", acfg.attribute(1).name());
RankProfilesConfig rcfg = model.getConfig(RankProfilesConfig.class, configId);
- assertEquals(6, rcfg.rankprofile().size());
+ assertEquals(7, rcfg.rankprofile().size());
}
@Test