diff options
author | Arne H Juul <arnej@yahooinc.com> | 2022-03-03 11:51:37 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2022-03-03 14:05:19 +0000 |
commit | fd48b501a984290f28b35d8be1ee5a0512b25814 (patch) | |
tree | db4fd309cb4864eaa7a7941ca3f88238ca2ca6eb /config-model/src/main/java/com/yahoo/searchdefinition | |
parent | 1fe86aad800d7c29db9bd27ed58dabdfd1c7e159 (diff) |
ensure we can parse most example .sd files
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition')
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) { |