aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/searchdefinition
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-03-03 11:51:37 +0000
committerArne H Juul <arnej@yahooinc.com>2022-03-03 14:05:19 +0000
commitfd48b501a984290f28b35d8be1ee5a0512b25814 (patch)
treedb4fd309cb4864eaa7a7941ca3f88238ca2ca6eb /config-model/src/main/java/com/yahoo/searchdefinition
parent1fe86aad800d7c29db9bd27ed58dabdfd1c7e159 (diff)
ensure we can parse most example .sd files
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAttribute.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java21
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedRankProfile.java36
3 files changed, 36 insertions, 31 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAttribute.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAttribute.java
index 484d56b6e3e..42cd77729ba 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAttribute.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedAttribute.java
@@ -22,7 +22,7 @@ class ParsedAttribute extends ParsedBlock {
private boolean enableMutable = false;
private boolean enablePaged = false;
private final Map<String, String> aliases = new HashMap<>();
- private ParsedSorting sortInfo = null;
+ private ParsedSorting sortSettings = null;
private String distanceMetric = null;
ParsedAttribute(String name) {
@@ -39,7 +39,7 @@ class ParsedAttribute extends ParsedBlock {
boolean getHuge() { return this.enableHuge; }
boolean getMutable() { return this.enableMutable; }
boolean getPaged() { return this.enablePaged; }
- Optional<ParsedSorting> getSorting() { return Optional.ofNullable(sortInfo); }
+ Optional<ParsedSorting> getSorting() { return Optional.ofNullable(sortSettings); }
void addAlias(String from, String to) {
verifyThat(! aliases.containsKey(to), "already has alias", to);
@@ -56,8 +56,8 @@ class ParsedAttribute extends ParsedBlock {
void setHuge(boolean value) { this.enableHuge = true; }
void setMutable(boolean value) { this.enableMutable = true; }
void setPaged(boolean value) { this.enablePaged = true; }
- void setSorting(ParsedSorting sorting) {
- verifyThat(this.sortInfo == null, "already has sorting");
- this.sortInfo = sorting;
+ ParsedSorting sortInfo() {
+ if (sortSettings == null) sortSettings = new ParsedSorting(name(), "attribute.sorting");
+ return this.sortSettings;
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java
index 9c7400136ab..c2998f77b49 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java
@@ -4,7 +4,7 @@ package com.yahoo.searchdefinition.parser;
import com.yahoo.searchdefinition.document.Stemming;
import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -29,12 +29,12 @@ class ParsedField extends ParsedBlock {
private Stemming stemming = null;
private ParsedIndexingOp indexingOp = null;
private ParsedSorting sortSettings = null;
- private final Map<String, ParsedAttribute> attributes = new HashMap<>();
- private final Map<String, ParsedIndex> fieldIndexes = new HashMap<>();
- private final Map<String, String> aliases = new HashMap<>();
- private final Map<String, String> rankTypes = new HashMap<>();
- private final Map<String, ParsedField> structFields = new HashMap<>();
- private final Map<String, ParsedSummaryField> summaryFields = new HashMap<>();
+ private final Map<String, ParsedAttribute> attributes = new LinkedHashMap<>();
+ private final Map<String, ParsedIndex> fieldIndexes = new LinkedHashMap<>();
+ private final Map<String, String> aliases = new LinkedHashMap<>();
+ private final Map<String, String> rankTypes = new LinkedHashMap<>();
+ private final Map<String, ParsedField> structFields = new LinkedHashMap<>();
+ private final Map<String, ParsedSummaryField> summaryFields = new LinkedHashMap<>();
private final List<DictionaryOption> dictionaryOptions = new ArrayList<>();
private final List<String> queryCommands = new ArrayList<>();
@@ -46,6 +46,7 @@ class ParsedField extends ParsedBlock {
ParsedType getType() { return this.type; }
boolean getBolding() { return this.hasBolding; }
boolean getFilter() { return this.isFilter; }
+ boolean getLiteral() { return this.isLiteral; }
boolean hasIdOverride() { return overrideId != 0; }
int idOverride() { return overrideId; }
List<DictionaryOption> getDictionaryOptions() { return List.copyOf(dictionaryOptions); }
@@ -130,9 +131,9 @@ class ParsedField extends ParsedBlock {
indexingOp = idxOp;
}
- void setSorting(ParsedSorting sorting) {
- verifyThat(sortSettings == null, "already has sorting");
- this.sortSettings = sorting;
+ ParsedSorting sortInfo() {
+ if (sortSettings == null) sortSettings = new ParsedSorting(name(), "field.sorting");
+ return this.sortSettings;
}
void addQueryCommand(String command) {
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 2011ac24148..ec43d7f5d06 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
@@ -6,6 +6,7 @@ import com.yahoo.searchdefinition.RankProfile.MutateOperation;
import com.yahoo.searchlib.rankingexpression.FeatureList;
import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue;
import com.yahoo.searchlib.rankingexpression.evaluation.Value;
+import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode;
import java.util.ArrayList;
import java.util.HashMap;
@@ -25,9 +26,9 @@ class ParsedRankProfile extends ParsedBlock {
private boolean ignoreDefaultRankFeatures = false;
private Double rankScoreDropLimit = null;
private Double termwiseLimit = null;
- private FeatureList matchFeatures = null;
- private FeatureList rankFeatures = null;
- private FeatureList summaryFeatures = null;
+ private List<ReferenceNode> matchFeatures = new ArrayList<>();
+ private List<ReferenceNode> rankFeatures = new ArrayList<>();
+ private List<ReferenceNode> summaryFeatures = new ArrayList<>();
private Integer keepRankCount = null;
private Integer minHitsPerThread = null;
private Integer numSearchPartitions = null;
@@ -45,7 +46,7 @@ class ParsedRankProfile extends ParsedBlock {
private final Map<String, Integer> fieldsRankWeight = new HashMap<>();
private final Map<String, ParsedRankFunction> functions = new HashMap<>();
private final Map<String, String> fieldsRankType = new HashMap<>();
- private final Map<String, String> rankProperties = new HashMap<>();
+ private final Map<String, List<String>> rankProperties = new HashMap<>();
private final Map<String, Value> constants = new HashMap<>();
ParsedRankProfile(String name) {
@@ -55,9 +56,9 @@ class ParsedRankProfile extends ParsedBlock {
boolean getIgnoreDefaultRankFeatures() { return this.ignoreDefaultRankFeatures; }
Optional<Double> getRankScoreDropLimit() { return Optional.ofNullable(this.rankScoreDropLimit); }
Optional<Double> getTermwiseLimit() { return Optional.ofNullable(this.termwiseLimit); }
- Optional<FeatureList> getMatchFeatures() { return Optional.ofNullable(this.matchFeatures); }
- Optional<FeatureList> getRankFeatures() { return Optional.ofNullable(this.rankFeatures); }
- Optional<FeatureList> getSummaryFeatures() { return Optional.ofNullable(this.summaryFeatures); }
+ List<ReferenceNode> getMatchFeatures() { return List.copyOf(this.matchFeatures); }
+ List<ReferenceNode> getRankFeatures() { return List.copyOf(this.rankFeatures); }
+ List<ReferenceNode> getSummaryFeatures() { return List.copyOf(this.summaryFeatures); }
Optional<Integer> getKeepRankCount() { return Optional.ofNullable(this.keepRankCount); }
Optional<Integer> getMinHitsPerThread() { return Optional.ofNullable(this.minHitsPerThread); }
Optional<Integer> getNumSearchPartitions() { return Optional.ofNullable(this.numSearchPartitions); }
@@ -72,25 +73,28 @@ class ParsedRankProfile extends ParsedBlock {
Map<String, Boolean> getFieldsWithRankFilter() { return Map.copyOf(fieldsRankFilter); }
Map<String, Integer> getFieldsWithRankWeight() { return Map.copyOf(fieldsRankWeight); }
Map<String, String> getFieldsWithRankType() { return Map.copyOf(fieldsRankType); }
- Map<String, String> getRankProperties() { return Map.copyOf(rankProperties); }
+ Map<String, List<String>> getRankProperties() { return Map.copyOf(rankProperties); }
Map<String, Value> getConstants() { return Map.copyOf(constants); }
Optional<String> getInheritedSummaryFeatures() { return Optional.ofNullable(this.inheritedSummaryFeatures); }
Optional<String> getSecondPhaseExpression() { return Optional.ofNullable(this.secondPhaseExpression); }
Optional<Boolean> isStrict() { return Optional.ofNullable(this.strict); }
void addSummaryFeatures(FeatureList features) {
- verifyThat(summaryFeatures == null, "already has summary-features");
- this.summaryFeatures = features;
+ for (var feature : features) {
+ this.summaryFeatures.add(feature);
+ }
}
void addMatchFeatures(FeatureList features) {
- verifyThat(matchFeatures == null, "already has match-features");
- this.matchFeatures = features;
+ for (var feature : features) {
+ this.matchFeatures.add(feature);
+ }
}
void addRankFeatures(FeatureList features) {
- verifyThat(rankFeatures == null, "already has rank-features");
- this.rankFeatures = features;
+ for (var feature : features) {
+ this.rankFeatures.add(feature);
+ }
}
void inherit(String other) { inherited.add(other); }
@@ -134,8 +138,8 @@ class ParsedRankProfile extends ParsedBlock {
}
void addRankProperty(String key, String value) {
- verifyThat(! rankProperties.containsKey(key), "already has value for rank property", key);
- rankProperties.put(key, value);
+ List<String> values = rankProperties.computeIfAbsent(key, k -> new ArrayList<String>());
+ values.add(value);
}
void setFirstPhaseRanking(String expression) {