summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-02-24 18:01:23 +0000
committerArne H Juul <arnej@yahooinc.com>2022-02-24 18:05:20 +0000
commitcb7a195768374d422c202112bfb50487fab7cfc1 (patch)
tree655f99848c6257015533dbfd0a38e79d1358392f /config-model/src/main/java/com/yahoo
parentbc02c9b1906d4310ad71fb95442b7421343077c8 (diff)
fix "summary" handling
* after closer inspection, change handling of the different summary-to, summary: and summary { } variants, to make new unit tests pass.
Diffstat (limited to 'config-model/src/main/java/com/yahoo')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedField.java29
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedSummaryField.java8
2 files changed, 35 insertions, 2 deletions
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 5066da2acd0..9c7400136ab 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
@@ -62,6 +62,35 @@ class ParsedField extends ParsedBlock {
Optional<ParsedSorting> getSorting() { return Optional.ofNullable(sortSettings); }
Map<String, String> getRankTypes() { return Map.copyOf(rankTypes); }
+ /** get an existing summary field for modification, or create it */
+ ParsedSummaryField summaryFieldFor(String name) {
+ if (summaryFields.containsKey(name)) {
+ return summaryFields.get(name);
+ }
+ var sf = new ParsedSummaryField(name, getType());
+ summaryFields.put(name, sf);
+ return sf;
+ }
+
+ /** get an existing summary field for modification, or create it */
+ ParsedSummaryField summaryFieldFor(String name, ParsedType type) {
+ if (summaryFields.containsKey(name)) {
+ var sf = summaryFields.get(name);
+ if (sf.getType() == null) {
+ sf.setType(type);
+ } else {
+ // TODO check that types are properly equal here
+ String oldName = sf.getType().name();
+ String newName = type.name();
+ verifyThat(newName.equals(oldName), "type mismatch for summary field", name, ":", oldName, "/", newName);
+ }
+ return sf;
+ }
+ var sf = new ParsedSummaryField(name, type);
+ summaryFields.put(name, sf);
+ return sf;
+ }
+
void addAlias(String from, String to) {
verifyThat(! aliases.containsKey(to), "already has alias", to);
aliases.put(to, from);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedSummaryField.java b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedSummaryField.java
index 2de0d402029..40e95045afd 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedSummaryField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/parser/ParsedSummaryField.java
@@ -13,7 +13,7 @@ import java.util.List;
**/
class ParsedSummaryField extends ParsedBlock {
- private final ParsedType type;
+ private ParsedType type;
private boolean isDyn = false;
private boolean isMEO = false;
private boolean isFull = false;
@@ -30,7 +30,7 @@ class ParsedSummaryField extends ParsedBlock {
this.type = type;
}
- ParsedType type() { return type; }
+ ParsedType getType() { return type; }
List<String> getDestinations() { return List.copyOf(destinations); }
List<String> getSources() { return List.copyOf(sources); }
boolean getBolded() { return isBold; }
@@ -44,4 +44,8 @@ class ParsedSummaryField extends ParsedBlock {
void setDynamic() { this.isDyn = true; }
void setFull() { this.isFull = true; }
void setMatchedElementsOnly() { this.isMEO = true; }
+ void setType(ParsedType value) {
+ verifyThat(type == null, "Cannot change type from ", type, "to", value);
+ this.type = value;
+ }
}