diff options
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java | 89 |
1 files changed, 35 insertions, 54 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java index 6c233aacf30..ea8e2aac1f0 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java @@ -9,9 +9,9 @@ import com.yahoo.vespa.config.search.SummaryConfig; import com.yahoo.vespa.documentmodel.DocumentSummary; import com.yahoo.vespa.documentmodel.SummaryField; import com.yahoo.vespa.documentmodel.SummaryTransform; -import java.util.Iterator; + +import java.util.Collections; import java.util.Map; -import java.util.Random; import java.util.logging.Level; /** @@ -19,63 +19,66 @@ import java.util.logging.Level; * Each summary definition have at least one summary, the default * which has the same name as the search definition. * - * @author bratseth + * @author bratseth */ public class SummaryClass extends Derived { public static final String DOCUMENT_ID_FIELD = "documentid"; + private final int id; + /** True if this summary class needs to access summary information on disk */ private boolean accessingDiskSummary = false; private final boolean rawAsBase64; private final boolean omitSummaryFeatures; /** The summary fields of this indexed by name */ - private final Map<String,SummaryClassField> fields = new java.util.LinkedHashMap<>(); + private final Map<String, SummaryClassField> fields; private final DeployLogger deployLogger; - private final Random random = new Random(7); - /** * Creates a summary class from a search definition summary * * @param deployLogger a {@link DeployLogger} */ public SummaryClass(Schema schema, DocumentSummary summary, DeployLogger deployLogger) { + super(summary.getName()); this.deployLogger = deployLogger; this.rawAsBase64 = schema.isRawAsBase64(); this.omitSummaryFeatures = summary.omitSummaryFeatures(); - deriveName(summary); - deriveFields(schema, summary); - deriveImplicitFields(summary); + Map<String, SummaryClassField> fields = new java.util.LinkedHashMap<>(); + deriveFields(schema, summary, fields); + deriveImplicitFields(summary, fields); + this.fields = Collections.unmodifiableMap(fields); + this.id = deriveId(summary.getName(), fields); } - private void deriveName(DocumentSummary summary) { - setName(summary.getName()); - } + public int id() { return id; } /** MUST be called after all other fields are added */ - private void deriveImplicitFields(DocumentSummary summary) { + private void deriveImplicitFields(DocumentSummary summary, Map<String, SummaryClassField> fields) { if (summary.getName().equals("default")) { - addField(SummaryClass.DOCUMENT_ID_FIELD, DataType.STRING); + addField(SummaryClass.DOCUMENT_ID_FIELD, DataType.STRING, fields); } } - private void deriveFields(Schema schema, DocumentSummary summary) { + private void deriveFields(Schema schema, DocumentSummary summary, Map<String, SummaryClassField> fields) { for (SummaryField summaryField : summary.getSummaryFields().values()) { if (!accessingDiskSummary && schema.isAccessingDiskSummary(summaryField)) { accessingDiskSummary = true; } - addField(summaryField.getName(), summaryField.getDataType(), summaryField.getTransform()); + addField(summaryField.getName(), summaryField.getDataType(), summaryField.getTransform(), fields); } } - private void addField(String name, DataType type) { - addField(name, type, null); + private void addField(String name, DataType type, Map<String, SummaryClassField> fields) { + addField(name, type, null, fields); } - private void addField(String name, DataType type, SummaryTransform transform) { + private void addField(String name, DataType type, + SummaryTransform transform, + Map<String, SummaryClassField> fields) { if (fields.containsKey(name)) { SummaryClassField sf = fields.get(name); if ( SummaryClassField.convertDataType(type, transform, rawAsBase64) != sf.getType()) { @@ -87,48 +90,23 @@ public class SummaryClass extends Derived { } } + public Map<String, SummaryClassField> fields() { return fields; } - /** Returns an iterator of the fields of this summary. Removes on this iterator removes the field from this summary */ - public Iterator<SummaryClassField> fieldIterator() { - return fields.values().iterator(); - } - - public void addField(SummaryClassField field) { - fields.put(field.getName(),field); - } - - /** Returns the writable map of fields of this summary */ // TODO: Make read only, move writers to iterator/addField - public Map<String,SummaryClassField> getFields() { return fields; } - - public SummaryClassField getField(String name) { - return fields.get(name); - } - - public int getFieldCount() { return fields.size(); } - - @Override - public int hashCode() { + private static int deriveId(String name, Map<String, SummaryClassField> fields) { + int hash = name.hashCode(); int number = 1; - int hash = getName().hashCode(); - for (Iterator i = fieldIterator(); i.hasNext(); ) { - SummaryClassField field = (SummaryClassField)i.next(); - hash += number * (field.getName().hashCode() + - 17*field.getType().getName().hashCode()); - number++; + for (var field : fields.values()) { + hash += number++ * (field.getName().hashCode() + + 17 * field.getType().getName().hashCode()); } - if (hash < 0) - hash *= -1; + hash = Math.abs(hash); + if (hash == DocsumDefinitionSet.SLIME_MAGIC_ID) + hash++; return hash; } public SummaryConfig.Classes.Builder getSummaryClassConfig() { SummaryConfig.Classes.Builder classBuilder = new SummaryConfig.Classes.Builder(); - int id = hashCode(); - if (id == DocsumDefinitionSet.SLIME_MAGIC_ID) { - deployLogger.log(Level.WARNING, "Summary class '" + getName() + "' hashes to the SLIME_MAGIC_ID '" + id + - "'. This is unlikely but I autofix it for you by adding a random number."); - id += random.nextInt(); - } classBuilder. id(id). name(getName()). @@ -142,11 +120,14 @@ public class SummaryClass extends Derived { } @Override + public int hashCode() { return id; } + + @Override protected String getDerivedName() { return "summary"; } @Override public String toString() { - return "summary class " + getName(); + return "summary class '" + getName() + "'"; } } |