From d107141bf6b50de1b448dd56be6faecf5005b7fb Mon Sep 17 00:00:00 2001 From: Areek Zillur Date: Mon, 8 Aug 2016 14:56:28 -0400 Subject: Remove payload option from completion suggester The payload option was introduced with the new completion suggester implementation in v5, as a stop gap solution to return additional metadata with suggestions. Now we can return associated documents with suggestions (#19536) through fetch phase using stored field (_source). The additional fetch phase ensures that we only fetch the _source for the global top-N suggestions instead of fetching _source of top results for each shard. --- .../suggest/completion/CompletionSuggester.java | 25 +----------- .../suggest/completion/CompletionSuggestion.java | 47 +--------------------- .../completion/CompletionSuggestionBuilder.java | 30 +------------- .../completion/CompletionSuggestionContext.java | 9 ----- 4 files changed, 4 insertions(+), 107 deletions(-) (limited to 'core/src/main/java/org/elasticsearch/search/suggest/completion') diff --git a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggester.java b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggester.java index c27f378915..4d118b64e5 100644 --- a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggester.java +++ b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggester.java @@ -78,7 +78,6 @@ public class CompletionSuggester extends Suggester TopSuggestDocsCollector collector = new TopDocumentsCollector(suggestionContext.getSize()); suggest(searcher, suggestionContext.toQuery(), collector); int numResult = 0; - List leaves = searcher.getIndexReader().leaves(); for (TopSuggestDocs.SuggestScoreDoc suggestScoreDoc : collector.get().scoreLookupDocs()) { TopDocumentsCollector.SuggestDoc suggestDoc = (TopDocumentsCollector.SuggestDoc) suggestScoreDoc; // collect contexts @@ -86,31 +85,9 @@ public class CompletionSuggester extends Suggester if (fieldType.hasContextMappings() && suggestDoc.getContexts().isEmpty() == false) { contexts = fieldType.getContextMappings().getNamedContexts(suggestDoc.getContexts()); } - // collect payloads - final Map> payload = new HashMap<>(0); - List payloadFields = suggestionContext.getPayloadFields(); - if (payloadFields.isEmpty() == false) { - final int readerIndex = ReaderUtil.subIndex(suggestDoc.doc, leaves); - final LeafReaderContext subReaderContext = leaves.get(readerIndex); - final int subDocId = suggestDoc.doc - subReaderContext.docBase; - for (String field : payloadFields) { - MapperService mapperService = suggestionContext.getShardContext().getMapperService(); - MappedFieldType payloadFieldType = mapperService.fullName(field); - if (payloadFieldType != null) { - QueryShardContext shardContext = suggestionContext.getShardContext(); - final AtomicFieldData data = shardContext.getForField(payloadFieldType) - .load(subReaderContext); - final ScriptDocValues scriptValues = data.getScriptValues(); - scriptValues.setNextDocId(subDocId); - payload.put(field, new ArrayList<>(scriptValues.getValues())); - } else { - throw new IllegalArgumentException("payload field [" + field + "] does not exist"); - } - } - } if (numResult++ < suggestionContext.getSize()) { CompletionSuggestion.Entry.Option option = new CompletionSuggestion.Entry.Option(suggestDoc.doc, - new Text(suggestDoc.key.toString()), suggestDoc.score, contexts, payload); + new Text(suggestDoc.key.toString()), suggestDoc.score, contexts); completionSuggestEntry.addOption(option); } else { break; diff --git a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestion.java b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestion.java index a92cbfe1e2..8453371078 100644 --- a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestion.java +++ b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestion.java @@ -194,14 +194,12 @@ public final class CompletionSuggestion extends Suggest.Suggestion> contexts; - private Map> payload; private ScoreDoc doc; private InternalSearchHit hit; - public Option(int docID, Text text, float score, Map> contexts, Map> payload) { + public Option(int docID, Text text, float score, Map> contexts) { super(text, score); this.doc = new ScoreDoc(docID, score); - this.payload = payload; this.contexts = contexts; } @@ -216,10 +214,6 @@ public final class CompletionSuggestion extends Suggest.Suggestion> getPayload() { - return payload; - } - public Map> getContexts() { return contexts; } @@ -248,17 +242,6 @@ public final class CompletionSuggestion extends Suggest.Suggestion 0) { - builder.startObject("payload"); - for (Map.Entry> entry : payload.entrySet()) { - builder.startArray(entry.getKey()); - for (Object payload : entry.getValue()) { - builder.value(payload); - } - builder.endArray(); - } - builder.endObject(); - } if (contexts.size() > 0) { builder.startObject("contexts"); for (Map.Entry> entry : contexts.entrySet()) { @@ -281,17 +264,6 @@ public final class CompletionSuggestion extends Suggest.Suggestion(payloadSize); - for (int i = 0; i < payloadSize; i++) { - String payloadName = in.readString(); - int nValues = in.readVInt(); - List values = new ArrayList<>(nValues); - for (int j = 0; j < nValues; j++) { - values.add(in.readGenericValue()); - } - this.payload.put(payloadName, values); - } int contextSize = in.readInt(); this.contexts = new LinkedHashMap<>(contextSize); for (int i = 0; i < contextSize; i++) { @@ -315,15 +287,6 @@ public final class CompletionSuggestion extends Suggest.Suggestion> entry : payload.entrySet()) { - out.writeString(entry.getKey()); - List values = entry.getValue(); - out.writeVInt(values.size()); - for (Object value : values) { - out.writeGenericValue(value); - } - } out.writeInt(contexts.size()); for (Map.Entry> entry : contexts.entrySet()) { out.writeString(entry.getKey()); @@ -341,14 +304,6 @@ public final class CompletionSuggestion extends Suggest.Suggestion> entry : payload.entrySet()) { - stringBuilder.append(" "); - stringBuilder.append(entry.getKey()); - stringBuilder.append(":"); - stringBuilder.append(entry.getValue()); - } - stringBuilder.append("]"); stringBuilder.append(" context:["); for (Map.Entry> entry: contexts.entrySet()) { stringBuilder.append(" "); diff --git a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java index 7810d03004..783b6536e2 100644 --- a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java +++ b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java @@ -62,7 +62,6 @@ import java.util.Objects; */ public class CompletionSuggestionBuilder extends SuggestionBuilder { static final String SUGGESTION_NAME = "completion"; - static final ParseField PAYLOAD_FIELD = new ParseField("payload"); static final ParseField CONTEXTS_FIELD = new ParseField("contexts", "context"); /** @@ -78,7 +77,6 @@ public class CompletionSuggestionBuilder extends SuggestionBuilder TLP_PARSER = new ObjectParser<>(SUGGESTION_NAME, null); static { - TLP_PARSER.declareStringArray(CompletionSuggestionBuilder.InnerBuilder::payload, PAYLOAD_FIELD); TLP_PARSER.declareField((parser, completionSuggestionContext, context) -> { if (parser.currentToken() == XContentParser.Token.VALUE_BOOLEAN) { if (parser.booleanValue()) { @@ -108,7 +106,6 @@ public class CompletionSuggestionBuilder extends SuggestionBuilder payloadFields = Collections.emptyList(); public CompletionSuggestionBuilder(String field) { super(field); @@ -123,7 +120,6 @@ public class CompletionSuggestionBuilder extends SuggestionBuilder(); - Collections.addAll(payloadFields, in.readStringArray()); fuzzyOptions = in.readOptionalWriteable(FuzzyOptions::new); regexOptions = in.readOptionalWriteable(RegexOptions::new); contextBytes = in.readOptionalBytesReference(); @@ -140,7 +134,6 @@ public class CompletionSuggestionBuilder extends SuggestionBuilder fields) { - Objects.requireNonNull(fields, "payload must not be null"); - this.payloadFields = fields; - return this; - } - /** * Sets query contexts for completion * @param queryContexts named query contexts @@ -348,13 +331,6 @@ public class CompletionSuggestionBuilder extends SuggestionBuilder> queryContexts = Collections.emptyMap(); - private List payloadFields = Collections.emptyList(); private CompletionFieldMapper2x.CompletionFieldType fieldType2x; private List contextQueries; @@ -73,14 +72,6 @@ public class CompletionSuggestionContext extends SuggestionSearchContext.Suggest this.queryContexts = queryContexts; } - void setPayloadFields(List fields) { - this.payloadFields = fields; - } - - List getPayloadFields() { - return payloadFields; - } - public FuzzyOptions getFuzzyOptions() { return fuzzyOptions; } -- cgit v1.2.3