diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/schema/DocumentSummary.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/schema/DocumentSummary.java | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/schema/DocumentSummary.java b/container-search/src/main/java/com/yahoo/search/schema/DocumentSummary.java new file mode 100644 index 00000000000..12037ee6633 --- /dev/null +++ b/container-search/src/main/java/com/yahoo/search/schema/DocumentSummary.java @@ -0,0 +1,160 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.search.schema; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * A document summary definition: Defines the schema on which a document hit may be + * represented in a Result. + * + * @author bratseth + */ +public class DocumentSummary { + + private final String name; + private final List<Field> fields; + private final boolean dynamic; + + private DocumentSummary(Builder builder) { + this.name = builder.name; + this.fields = List.copyOf(builder.fields); + this.dynamic = builder.dynamic; + } + + public String name() { return name; } + public List<Field> fields() { return fields; } + + /** Returns whether this contains fields which are generated dynamically from the query and field data. */ + public boolean isDynamic() { return dynamic; } + + @Override + public boolean equals(Object o) { + if (o == this) return true; + if ( ! (o instanceof DocumentSummary)) return false; + var other = (DocumentSummary)o; + if ( ! other.name.equals(this.name)) return false; + if ( other.dynamic != this.dynamic) return false; + if ( ! other.fields.equals(this.fields)) return false; + return true; + } + + @Override + public int hashCode() { + return Objects.hash(name, dynamic, fields); + } + + @Override + public String toString() { + return "document summary '" + name + "'"; + } + + public static class Builder { + + private final String name; + private final List<Field> fields = new ArrayList<>(); + private boolean dynamic; + + public Builder(String name) { + this.name = name; + } + + public Builder add(Field field) { + fields.add(field); + return this; + } + + public Builder setDynamic(boolean dynamic) { + this.dynamic = dynamic; + return this; + } + + public DocumentSummary build() { return new DocumentSummary(this); } + + } + + public static class Field { + + public enum Type { + bool, + byteType("byte"), + shortType("short"), + integer, + int64, + float16, + floatType("float"), + doubleType("double"), + string, + data, + raw, + longstring, + longdata, + jsonstring, + featuredata, + xmlstring, + tensor; + + private final String name; + + Type() { + this(null); + } + + Type(String name) { + this.name = name; + } + + /** Use this, not name() to retrieve the string value of this. */ + public String asString() { + return name != null ? name : name(); + } + + @Override + public String toString() { return asString(); } + + public static Type fromString(String name) { + return Arrays.stream(Type.values()).filter(t -> name.equals(t.asString())).findAny().orElseThrow(); + } + + } + + private final String name; + private final Type type; + + public Field(String name, String type) { + this(name, Type.fromString(type)); + } + + public Field(String name, Type type) { + this.name = name; + this.type = type; + } + + public String name() { return name; } + public Type type() { return type; } + + @Override + public boolean equals(Object o) { + if (o == this) return true; + if ( ! (o instanceof Field)) return false; + var other = (Field)o; + if ( ! other.name.equals(this.name)) return false; + if ( other.type != this.type) return false; + return true; + } + + @Override + public int hashCode() { + return Objects.hash(name, type); + } + + @Override + public String toString() { + return "summary field '" + name + "' " + type; + } + + } + +} |