diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinition.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinition.java | 92 |
1 files changed, 19 insertions, 73 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinition.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinition.java index 8a7d14d5f49..33b912da42f 100644 --- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinition.java +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinition.java @@ -1,15 +1,11 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.prelude.fastsearch; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.yahoo.data.access.Inspector; +import com.yahoo.search.schema.DocumentSummary; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Set; +import java.util.stream.Collectors; /** * A docsum definition which knows how to decode a certain class of document @@ -21,55 +17,26 @@ import java.util.Set; public class DocsumDefinition { private final String name; - private final ImmutableList<DocsumField> fields; + private final Map<String, DocsumField> fields; /** True if this contains dynamic fields */ private final boolean dynamic; - // Mapping between field names and their index in this.fields - private final ImmutableMap<String, Integer> fieldNameToIndex; - - public DocsumDefinition(String name, List<DocsumField> fields) { - this.name = name; - this.dynamic = false; - this.fields = ImmutableList.copyOf(fields); - ImmutableMap.Builder<String, Integer> fieldNameToIndexBuilder = new ImmutableMap.Builder<>(); - int i = 0; - for (DocsumField field : fields) - fieldNameToIndexBuilder.put(field.name, i++); - this.fieldNameToIndex = fieldNameToIndexBuilder.build(); + public DocsumDefinition(DocumentSummary documentSummary) { + this.name = documentSummary.name(); + this.dynamic = documentSummary.isDynamic(); + this.fields = documentSummary.fields() + .stream() + .map(field -> DocsumField.create(field.name(), field.type().asString())) + .collect(Collectors.toUnmodifiableMap(field -> field.getName(), + field -> field)); } - DocsumDefinition(DocumentdbInfoConfig.Documentdb.Summaryclass config) { - this.name = config.name(); - - List<DocsumField> fieldsBuilder = new ArrayList<>(); - Map<String, Integer> fieldNameToIndexBuilder = new HashMap<>(); - boolean dynamic = false; - for (DocumentdbInfoConfig.Documentdb.Summaryclass.Fields field : config.fields()) { - // no, don't switch the order of the two next lines :) - fieldNameToIndexBuilder.put(field.name(), fieldsBuilder.size()); - fieldsBuilder.add(DocsumField.create(field.name(), field.type())); - if (field.dynamic()) - dynamic = true; - } - this.dynamic = dynamic; - fields = ImmutableList.copyOf(fieldsBuilder); - fieldNameToIndex = ImmutableMap.copyOf(fieldNameToIndexBuilder); - } - - /** Returns the field at this index, or null if none */ - public DocsumField getField(int fieldIndex) { - if (fieldIndex >= fields.size()) return null; - return fields.get(fieldIndex); - } + public String name() { return name; } + public Map<String, DocsumField> fields() { return fields; } - /** Returns the field with this name, or null if none */ - public DocsumField getField(String fieldName) { - Integer index = fieldNameToIndex.get(fieldName); - if (index == null) return null; - return getField(index); - } + /** Returns whether this summary contains one or more dynamic fields */ + public boolean isDynamic() { return dynamic; } /** * Returns the given slime value as the type specified in this, or null if the type is not known. @@ -78,35 +45,14 @@ public class DocsumDefinition { * another has not. */ public Object convert(String fieldName, Inspector value) { - DocsumField fieldType = getField(fieldName); - if (fieldType == null || ! value.valid()) return null; - return fieldType.convert(value); - } - - public Set<String> fieldNames() { - return fieldNameToIndex.keySet(); + DocsumField field = fields.get(fieldName); + if (field == null || ! value.valid()) return null; + return field.convert(value); } @Override public String toString() { - return "docsum definition '" + getName() + "'"; - } - - public String getName() { - return name; - } - - public int getFieldCount() { - return fields.size(); - } - - public List<DocsumField> getFields() { - return fields; - } - - /** Returns whether this summary contains one or more dynamic fields */ - public boolean isDynamic() { - return dynamic; + return "docsum definition '" + name() + "'"; } } |