List of usage examples for org.apache.lucene.search.suggest.document SuggestField SuggestField
public SuggestField(String name, String value, int weight)
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; }