Search in sources :

Example 1 with Option

use of org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option in project elasticsearch by elastic.

the class Suggest method reduce.

public static List<Suggestion<? extends Entry<? extends Option>>> reduce(Map<String, List<Suggest.Suggestion>> groupedSuggestions) {
    List<Suggestion<? extends Entry<? extends Option>>> reduced = new ArrayList<>(groupedSuggestions.size());
    for (java.util.Map.Entry<String, List<Suggestion>> unmergedResults : groupedSuggestions.entrySet()) {
        List<Suggestion> value = unmergedResults.getValue();
        Class<? extends Suggestion> suggestionClass = null;
        for (Suggestion suggestion : value) {
            if (suggestionClass == null) {
                suggestionClass = suggestion.getClass();
            } else if (suggestionClass != suggestion.getClass()) {
                throw new IllegalArgumentException("detected mixed suggestion results, due to querying on old and new completion suggester," + " query on a single completion suggester version");
            }
        }
        Suggestion reduce = value.get(0).reduce(value);
        reduce.trim();
        reduced.add(reduce);
    }
    return reduced;
}
Also used : ArrayList(java.util.ArrayList) CompletionSuggestion(org.elasticsearch.search.suggest.completion.CompletionSuggestion) PhraseSuggestion(org.elasticsearch.search.suggest.phrase.PhraseSuggestion) TermSuggestion(org.elasticsearch.search.suggest.term.TermSuggestion) Entry(org.elasticsearch.search.suggest.Suggest.Suggestion.Entry) Option(org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with Option

use of org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option in project elasticsearch by elastic.

the class SuggestPhase method execute.

@Override
public void execute(SearchContext context) {
    final SuggestionSearchContext suggest = context.suggest();
    if (suggest == null) {
        return;
    }
    try {
        CharsRefBuilder spare = new CharsRefBuilder();
        final List<Suggestion<? extends Entry<? extends Option>>> suggestions = new ArrayList<>(suggest.suggestions().size());
        for (Map.Entry<String, SuggestionSearchContext.SuggestionContext> entry : suggest.suggestions().entrySet()) {
            SuggestionSearchContext.SuggestionContext suggestion = entry.getValue();
            Suggester<SuggestionContext> suggester = suggestion.getSuggester();
            Suggestion<? extends Entry<? extends Option>> result = suggester.execute(entry.getKey(), suggestion, context.searcher(), spare);
            if (result != null) {
                assert entry.getKey().equals(result.name);
                suggestions.add(result);
            }
        }
        context.queryResult().suggest(new Suggest(suggestions));
    } catch (IOException e) {
        throw new ElasticsearchException("I/O exception during suggest phase", e);
    }
}
Also used : ArrayList(java.util.ArrayList) IOException(java.io.IOException) ElasticsearchException(org.elasticsearch.ElasticsearchException) SuggestionContext(org.elasticsearch.search.suggest.SuggestionSearchContext.SuggestionContext) Suggestion(org.elasticsearch.search.suggest.Suggest.Suggestion) Entry(org.elasticsearch.search.suggest.Suggest.Suggestion.Entry) SuggestionContext(org.elasticsearch.search.suggest.SuggestionSearchContext.SuggestionContext) Option(org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option) CharsRefBuilder(org.apache.lucene.util.CharsRefBuilder) Map(java.util.Map)

Example 3 with Option

use of org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option in project elasticsearch by elastic.

the class SuggestionEntryTests method testFromXContent.

@SuppressWarnings("unchecked")
public void testFromXContent() throws IOException {
    for (Class<? extends Entry> entryType : ENTRY_PARSERS.keySet()) {
        Entry<Option> entry = createTestItem(entryType);
        XContentType xContentType = randomFrom(XContentType.values());
        boolean humanReadable = randomBoolean();
        BytesReference originalBytes = toXContent(entry, xContentType, humanReadable);
        Entry<Option> parsed;
        try (XContentParser parser = createParser(xContentType.xContent(), originalBytes)) {
            ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser::getTokenLocation);
            parsed = ENTRY_PARSERS.get(entry.getClass()).apply(parser);
            assertEquals(XContentParser.Token.END_OBJECT, parser.currentToken());
            assertNull(parser.nextToken());
        }
        assertEquals(entry.getClass(), parsed.getClass());
        assertEquals(entry.getText(), parsed.getText());
        assertEquals(entry.getLength(), parsed.getLength());
        assertEquals(entry.getOffset(), parsed.getOffset());
        assertEquals(entry.getOptions().size(), parsed.getOptions().size());
        for (int i = 0; i < entry.getOptions().size(); i++) {
            assertEquals(entry.getOptions().get(i).getClass(), parsed.getOptions().get(i).getClass());
        }
        assertToXContentEquivalent(originalBytes, toXContent(parsed, xContentType, humanReadable), xContentType);
    }
}
Also used : BytesReference(org.elasticsearch.common.bytes.BytesReference) XContentType(org.elasticsearch.common.xcontent.XContentType) Option(org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Example 4 with Option

use of org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option in project elasticsearch by elastic.

the class SuggestionOptionTests method testToXContent.

public void testToXContent() throws IOException {
    Option option = new Option(new Text("someText"), new Text("somethingHighlighted"), 1.3f, true);
    BytesReference xContent = toXContent(option, XContentType.JSON, randomBoolean());
    assertEquals("{\"text\":\"someText\"," + "\"highlighted\":\"somethingHighlighted\"," + "\"score\":1.3," + "\"collate_match\":true" + "}", xContent.utf8ToString());
}
Also used : BytesReference(org.elasticsearch.common.bytes.BytesReference) Option(org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option) Text(org.elasticsearch.common.text.Text)

Example 5 with Option

use of org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option in project elasticsearch by elastic.

the class SuggestionTests method testFromXContent.

@SuppressWarnings({ "rawtypes" })
public void testFromXContent() throws IOException {
    ToXContent.Params params = new ToXContent.MapParams(Collections.singletonMap(RestSearchAction.TYPED_KEYS_PARAM, "true"));
    for (Class<Suggestion<? extends Entry<? extends Option>>> type : SUGGESTION_TYPES) {
        Suggestion suggestion = createTestItem(type);
        XContentType xContentType = randomFrom(XContentType.values());
        boolean humanReadable = randomBoolean();
        BytesReference originalBytes = toXContent(suggestion, xContentType, params, humanReadable);
        Suggestion parsed;
        try (XContentParser parser = createParser(xContentType.xContent(), originalBytes)) {
            ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser::getTokenLocation);
            ensureExpectedToken(XContentParser.Token.FIELD_NAME, parser.nextToken(), parser::getTokenLocation);
            parsed = Suggestion.fromXContent(parser);
            assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken());
            assertNull(parser.nextToken());
        }
        assertEquals(suggestion.getName(), parsed.getName());
        assertEquals(suggestion.getEntries().size(), parsed.getEntries().size());
        // We don't parse size via xContent, instead we set it to -1 on the client side
        assertEquals(-1, parsed.getSize());
        assertToXContentEquivalent(originalBytes, toXContent(parsed, xContentType, params, humanReadable), xContentType);
    }
}
Also used : ToXContent(org.elasticsearch.common.xcontent.ToXContent) BytesReference(org.elasticsearch.common.bytes.BytesReference) CompletionSuggestion(org.elasticsearch.search.suggest.completion.CompletionSuggestion) Suggestion(org.elasticsearch.search.suggest.Suggest.Suggestion) PhraseSuggestion(org.elasticsearch.search.suggest.phrase.PhraseSuggestion) TermSuggestion(org.elasticsearch.search.suggest.term.TermSuggestion) Entry(org.elasticsearch.search.suggest.Suggest.Suggestion.Entry) XContentType(org.elasticsearch.common.xcontent.XContentType) Option(org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Aggregations

Option (org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option)11 BytesReference (org.elasticsearch.common.bytes.BytesReference)7 Entry (org.elasticsearch.search.suggest.Suggest.Suggestion.Entry)7 Text (org.elasticsearch.common.text.Text)6 CompletionSuggestion (org.elasticsearch.search.suggest.completion.CompletionSuggestion)5 TermSuggestion (org.elasticsearch.search.suggest.term.TermSuggestion)5 XContentParser (org.elasticsearch.common.xcontent.XContentParser)4 ArrayList (java.util.ArrayList)3 Map (java.util.Map)3 XContentType (org.elasticsearch.common.xcontent.XContentType)3 Suggestion (org.elasticsearch.search.suggest.Suggest.Suggestion)3 PhraseSuggestion (org.elasticsearch.search.suggest.phrase.PhraseSuggestion)3 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 List (java.util.List)1 TokenStream (org.apache.lucene.analysis.TokenStream)1 IndexReader (org.apache.lucene.index.IndexReader)1 Terms (org.apache.lucene.index.Terms)1 DirectSpellChecker (org.apache.lucene.search.spell.DirectSpellChecker)1 BytesRef (org.apache.lucene.util.BytesRef)1