All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yahoo.vespa.documentmodel.SearchField Maven / Gradle / Ivy

There is a newer version: 8.441.21
Show newest version
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.documentmodel;

import com.yahoo.document.DataType;
import com.yahoo.document.Field;

import java.util.ArrayList;
import java.util.List;

/**
 * @author baldersheim
 */
public class SearchField extends Field {

    /// Indicate if field shall be stored in memory for attribute usage.
    private boolean attribute = false;
    /// Indicate if the field is Vespa indexed.
    private boolean indexed = false;
    /// Indication to backend on how much optimization should be done.

    /**
     * This is a representation of features to generate for this field.
     * It can be both optimize hints, and real functional hints.
     */
    public enum Feature {
        WEIGHT_IN_ATTRIBUTE_POSTINGS("WeightInAttributePosting"),    // Hint to put the weight in postings for attribute.
        WORDPOS_IN_POSTINGS("WordPosInPosting"),                     // Default for generating posocc
        FILTER_ONLY("FilterOnly");                                   // Might only generate bitvector
        private String name;
        Feature(String name) { this.name = name;}
        public String getName() { return name; }
    }
    private List featureList = new ArrayList<>();

    public SearchField(Field field, boolean indexed, boolean attribute) {
        this(field, indexed, attribute, null);
    }
    public SearchField(Field field, boolean indexed, boolean attribute, List features) {
        super(field.getName(), field);
        this.attribute = attribute;
        this.indexed = indexed;
        if (features != null) {
            featureList.addAll(features);
        }
        validate();
    }

    private void validate() {
        if (attribute || !indexed) {
            return;
        }
        DataType fieldType = getDataType();
        DataType primiType = fieldType.getPrimitiveType();
        if (DataType.STRING.equals(primiType) || DataType.URI.equals(primiType)) {
            return;
        }
        throw new IllegalArgumentException("Expected type " + DataType.STRING.getName() + " for indexed field '" +
                                           getName() + "', got " + fieldType.getName() + ".");
    }

    public SearchField setIndexed() { indexed = true; validate(); return this; }
    public SearchField setAttribute() { attribute = true; validate(); return this; }
    public boolean isAttribute() { return attribute; }

    public boolean   isIndexed() { return indexed; }
    public SearchField addFeature(Feature feature) { featureList.add(feature); validate(); return this; }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy