Example usage for org.apache.lucene.search.suggest.document SuggestField SuggestField

List of usage examples for org.apache.lucene.search.suggest.document SuggestField SuggestField

Introduction

In this page you can find the example usage for org.apache.lucene.search.suggest.document SuggestField SuggestField.

Prototype

public SuggestField(String name, String value, int weight) 

Source Link

Document

Creates a SuggestField

Usage

From source file:org.elasticsearch.index.mapper.CompletionFieldMapper.java

License:Apache License

/**
 * Parses and indexes inputs/*from  w ww  .j a v a 2s  . c  o m*/
 *
 * Parsing:
 *  Acceptable format:
 *   "STRING" - interpreted as field value (input)
 *   "ARRAY" - each element can be one of "OBJECT" (see below)
 *   "OBJECT" - { "input": STRING|ARRAY, "weight": STRING|INT, "contexts": ARRAY|OBJECT }
 *
 * Indexing:
 *  if context mappings are defined, delegates to {@link ContextMappings#addField(ParseContext.Document, String, String, int, Map)}
 *  else adds inputs as a {@link org.apache.lucene.search.suggest.document.SuggestField}
 */
@Override
public Mapper parse(ParseContext context) throws IOException {
    // parse
    XContentParser parser = context.parser();
    Token token = parser.currentToken();
    Map<String, CompletionInputMetaData> inputMap = new HashMap<>(1);
    if (token == Token.VALUE_NULL) {
        throw new MapperParsingException(
                "completion field [" + fieldType().name() + "] does not support null values");
    } else if (token == Token.START_ARRAY) {
        while ((token = parser.nextToken()) != Token.END_ARRAY) {
            parse(context, token, parser, inputMap);
        }
    } else {
        parse(context, token, parser, inputMap);
    }

    // index
    for (Map.Entry<String, CompletionInputMetaData> completionInput : inputMap.entrySet()) {
        String input = completionInput.getKey();
        // truncate input
        if (input.length() > maxInputLength) {
            int len = Math.min(maxInputLength, input.length());
            if (Character.isHighSurrogate(input.charAt(len - 1))) {
                assert input.length() >= len + 1 && Character.isLowSurrogate(input.charAt(len));
                len += 1;
            }
            input = input.substring(0, len);
        }
        CompletionInputMetaData metaData = completionInput.getValue();
        if (fieldType().hasContextMappings()) {
            fieldType().getContextMappings().addField(context.doc(), fieldType().name(), input, metaData.weight,
                    metaData.contexts);
        } else {
            context.doc().add(new SuggestField(fieldType().name(), input, metaData.weight));
        }
    }
    multiFields.parse(this, context);
    return null;
}