summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/search/suggest/completion
diff options
context:
space:
mode:
authorAdrien Grand <jpountz@gmail.com>2016-11-30 13:34:46 +0100
committerGitHub <noreply@github.com>2016-11-30 13:34:46 +0100
commit6231009a8fc53ab5225483ab14a742b4555bacf3 (patch)
treeed965506bc9608514e7ab36ba32187443a8b1d0e /core/src/main/java/org/elasticsearch/search/suggest/completion
parent235e6acd733e385d14ef45c928368c0159d760c4 (diff)
Remove 2.x backward compatibility of mappings. (#21670)
For the record, I also had to remove the geo-hash cell and geo-distance range queries to make the code compile. These queries already throw an exception in all cases with 5.x indices, so that does not hurt any more. I also had to rename all 2.x bwc indices from `index-${version}` to `unsupported-${version}` to make `OldIndexBackwardCompatibilityIT` happy.
Diffstat (limited to 'core/src/main/java/org/elasticsearch/search/suggest/completion')
-rw-r--r--core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggester.java75
-rw-r--r--core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java123
-rw-r--r--core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java19
-rw-r--r--core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java4
4 files changed, 4 insertions, 217 deletions
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 f471d91c3b..049883822d 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
@@ -18,11 +18,7 @@
*/
package org.elasticsearch.search.suggest.completion;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.ReaderUtil;
-import org.apache.lucene.index.Terms;
import org.apache.lucene.search.BulkScorer;
import org.apache.lucene.search.CollectionTerminatedException;
import org.apache.lucene.search.IndexSearcher;
@@ -32,28 +28,19 @@ import org.apache.lucene.search.suggest.document.CompletionQuery;
import org.apache.lucene.search.suggest.document.TopSuggestDocs;
import org.apache.lucene.search.suggest.document.TopSuggestDocsCollector;
import org.apache.lucene.util.CharsRefBuilder;
-import org.apache.lucene.util.CollectionUtil;
import org.apache.lucene.util.PriorityQueue;
-import org.elasticsearch.common.bytes.BytesArray;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.text.Text;
-import org.elasticsearch.index.fielddata.AtomicFieldData;
-import org.elasticsearch.index.fielddata.ScriptDocValues;
import org.elasticsearch.index.mapper.CompletionFieldMapper;
-import org.elasticsearch.index.mapper.MappedFieldType;
-import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.query.QueryParseContext;
-import org.elasticsearch.index.query.QueryShardContext;
import org.elasticsearch.search.suggest.Suggest;
import org.elasticsearch.search.suggest.Suggester;
import org.elasticsearch.search.suggest.SuggestionBuilder;
-import org.elasticsearch.search.suggest.completion2x.Completion090PostingsFormat;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -94,72 +81,10 @@ public class CompletionSuggester extends Suggester<CompletionSuggestionContext>
}
}
return completionSuggestion;
- } else if (suggestionContext.getFieldType2x() != null) {
- final IndexReader indexReader = searcher.getIndexReader();
- org.elasticsearch.search.suggest.completion2x.CompletionSuggestion completionSuggestion =
- new org.elasticsearch.search.suggest.completion2x.CompletionSuggestion(name, suggestionContext.getSize());
- spare.copyUTF8Bytes(suggestionContext.getText());
-
- org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry completionSuggestEntry =
- new org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry(new Text(spare.toString()), 0, spare.length());
- completionSuggestion.addTerm(completionSuggestEntry);
-
- String fieldName = suggestionContext.getField();
- Map<String, org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry.Option> results =
- new HashMap<>(indexReader.leaves().size() * suggestionContext.getSize());
- for (LeafReaderContext atomicReaderContext : indexReader.leaves()) {
- LeafReader atomicReader = atomicReaderContext.reader();
- Terms terms = atomicReader.fields().terms(fieldName);
- if (terms instanceof Completion090PostingsFormat.CompletionTerms) {
- final Completion090PostingsFormat.CompletionTerms lookupTerms = (Completion090PostingsFormat.CompletionTerms) terms;
- final Lookup lookup = lookupTerms.getLookup(suggestionContext.getFieldType2x(), suggestionContext);
- if (lookup == null) {
- // we don't have a lookup for this segment.. this might be possible if a merge dropped all
- // docs from the segment that had a value in this segment.
- continue;
- }
- List<Lookup.LookupResult> lookupResults = lookup.lookup(spare.get(), false, suggestionContext.getSize());
- for (Lookup.LookupResult res : lookupResults) {
-
- final String key = res.key.toString();
- final float score = res.value;
- final org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry.Option value = results.get(key);
- if (value == null) {
- final org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry.Option option =
- new org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry.Option(new Text(key), score,
- res.payload == null ? null : new BytesArray(res.payload));
- results.put(key, option);
- } else if (value.getScore() < score) {
- value.setScore(score);
- value.setPayload(res.payload == null ? null : new BytesArray(res.payload));
- }
- }
- }
- }
- final List<org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry.Option> options =
- new ArrayList<>(results.values());
- CollectionUtil.introSort(options, scoreComparator);
-
- int optionCount = Math.min(suggestionContext.getSize(), options.size());
- for (int i = 0; i < optionCount; i++) {
- completionSuggestEntry.addOption(options.get(i));
- }
-
- return completionSuggestion;
}
return null;
}
- private static final ScoreComparator scoreComparator = new ScoreComparator();
- public static class ScoreComparator implements
- Comparator<org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry.Option> {
- @Override
- public int compare(org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry.Option o1,
- org.elasticsearch.search.suggest.completion2x.CompletionSuggestion.Entry.Option o2) {
- return Float.compare(o2.getScore(), o1.getScore());
- }
- }
-
private static void suggest(IndexSearcher searcher, CompletionQuery query, TopSuggestDocsCollector collector) throws IOException {
query = (CompletionQuery) query.rewrite(searcher.getIndexReader());
Weight weight = query.createWeight(searcher, collector.needsScores());
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 3b216d9186..09382d9aaf 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
@@ -32,7 +32,6 @@ import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.mapper.CompletionFieldMapper;
-import org.elasticsearch.index.mapper.CompletionFieldMapper2x;
import org.elasticsearch.index.mapper.MappedFieldType;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.query.QueryParseContext;
@@ -41,9 +40,6 @@ import org.elasticsearch.search.suggest.SuggestionBuilder;
import org.elasticsearch.search.suggest.SuggestionSearchContext.SuggestionContext;
import org.elasticsearch.search.suggest.completion.context.ContextMapping;
import org.elasticsearch.search.suggest.completion.context.ContextMappings;
-import org.elasticsearch.search.suggest.completion2x.context.CategoryContextMapping;
-import org.elasticsearch.search.suggest.completion2x.context.ContextMapping.ContextQuery;
-import org.elasticsearch.search.suggest.completion2x.context.GeolocationContextMapping;
import java.io.IOException;
import java.util.ArrayList;
@@ -215,105 +211,6 @@ public class CompletionSuggestionBuilder extends SuggestionBuilder<CompletionSug
return this;
}
- public CompletionSuggestionBuilder contexts(Contexts2x contexts2x) {
- Objects.requireNonNull(contexts2x, "contexts must not be null");
- try {
- XContentBuilder contentBuilder = XContentFactory.jsonBuilder();
- contentBuilder.startObject();
- for (ContextQuery contextQuery : contexts2x.contextQueries) {
- contextQuery.toXContent(contentBuilder, EMPTY_PARAMS);
- }
- contentBuilder.endObject();
- return contexts(contentBuilder);
- } catch (IOException e) {
- throw new IllegalArgumentException(e);
- }
- }
-
- // for 2.x context support
- public static class Contexts2x {
- private List<ContextQuery> contextQueries = new ArrayList<>();
-
- @SuppressWarnings("unchecked")
- private Contexts2x addContextQuery(ContextQuery ctx) {
- this.contextQueries.add(ctx);
- return this;
- }
-
- /**
- * Setup a Geolocation for suggestions. See {@link GeolocationContextMapping}.
- * @param lat Latitude of the location
- * @param lon Longitude of the Location
- * @return this
- */
- @Deprecated
- public Contexts2x addGeoLocation(String name, double lat, double lon, int ... precisions) {
- return addContextQuery(GeolocationContextMapping.query(name, lat, lon, precisions));
- }
-
- /**
- * Setup a Geolocation for suggestions. See {@link GeolocationContextMapping}.
- * @param lat Latitude of the location
- * @param lon Longitude of the Location
- * @param precisions precisions as string var-args
- * @return this
- */
- @Deprecated
- public Contexts2x addGeoLocationWithPrecision(String name, double lat, double lon, String ... precisions) {
- return addContextQuery(GeolocationContextMapping.query(name, lat, lon, precisions));
- }
-
- /**
- * Setup a Geolocation for suggestions. See {@link GeolocationContextMapping}.
- * @param geohash Geohash of the location
- * @return this
- */
- @Deprecated
- public Contexts2x addGeoLocation(String name, String geohash) {
- return addContextQuery(GeolocationContextMapping.query(name, geohash));
- }
-
- /**
- * Setup a Category for suggestions. See {@link CategoryContextMapping}.
- * @param categories name of the category
- * @return this
- */
- @Deprecated
- public Contexts2x addCategory(String name, CharSequence...categories) {
- return addContextQuery(CategoryContextMapping.query(name, categories));
- }
-
- /**
- * Setup a Category for suggestions. See {@link CategoryContextMapping}.
- * @param categories name of the category
- * @return this
- */
- @Deprecated
- public Contexts2x addCategory(String name, Iterable<? extends CharSequence> categories) {
- return addContextQuery(CategoryContextMapping.query(name, categories));
- }
-
- /**
- * Setup a Context Field for suggestions. See {@link CategoryContextMapping}.
- * @param fieldvalues name of the category
- * @return this
- */
- @Deprecated
- public Contexts2x addContextField(String name, CharSequence...fieldvalues) {
- return addContextQuery(CategoryContextMapping.query(name, fieldvalues));
- }
-
- /**
- * Setup a Context Field for suggestions. See {@link CategoryContextMapping}.
- * @param fieldvalues name of the category
- * @return this
- */
- @Deprecated
- public Contexts2x addContextField(String name, Iterable<? extends CharSequence> fieldvalues) {
- return addContextQuery(CategoryContextMapping.query(name, fieldvalues));
- }
- }
-
private static class InnerBuilder extends CompletionSuggestionBuilder {
private String field;
@@ -366,8 +263,7 @@ public class CompletionSuggestionBuilder extends SuggestionBuilder<CompletionSug
suggestionContext.setRegexOptions(regexOptions);
MappedFieldType mappedFieldType = mapperService.fullName(suggestionContext.getField());
if (mappedFieldType == null ||
- (mappedFieldType instanceof CompletionFieldMapper.CompletionFieldType == false
- && mappedFieldType instanceof CompletionFieldMapper2x.CompletionFieldType == false)) {
+ mappedFieldType instanceof CompletionFieldMapper.CompletionFieldType == false) {
throw new IllegalArgumentException("Field [" + suggestionContext.getField() + "] is not a completion suggest field");
}
if (mappedFieldType instanceof CompletionFieldMapper.CompletionFieldType) {
@@ -395,23 +291,8 @@ public class CompletionSuggestionBuilder extends SuggestionBuilder<CompletionSug
} else if (contextBytes != null) {
throw new IllegalArgumentException("suggester [" + type.name() + "] doesn't expect any context");
}
- } else if (mappedFieldType instanceof CompletionFieldMapper2x.CompletionFieldType) {
- CompletionFieldMapper2x.CompletionFieldType type = ((CompletionFieldMapper2x.CompletionFieldType) mappedFieldType);
- suggestionContext.setFieldType2x(type);
- if (type.requiresContext()) {
- if (contextBytes != null) {
- try (XContentParser contextParser = XContentFactory.xContent(contextBytes).createParser(contextBytes)) {
- contextParser.nextToken();
- suggestionContext.setContextQueries(ContextQuery.parseQueries(type.getContextMapping(), contextParser));
- }
- } else {
- throw new IllegalArgumentException("suggester [completion] requires context to be setup");
- }
- } else if (contextBytes != null) {
- throw new IllegalArgumentException("suggester [completion] doesn't expect any context");
- }
}
- assert suggestionContext.getFieldType() != null || suggestionContext.getFieldType2x() != null : "no completion field type set";
+ assert suggestionContext.getFieldType() != null : "no completion field type set";
return suggestionContext;
}
diff --git a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java
index 273aeb3171..a4aeec8cb5 100644
--- a/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java
+++ b/core/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionContext.java
@@ -21,12 +21,10 @@ package org.elasticsearch.search.suggest.completion;
import org.apache.lucene.search.suggest.document.CompletionQuery;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.mapper.CompletionFieldMapper;
-import org.elasticsearch.index.mapper.CompletionFieldMapper2x;
import org.elasticsearch.index.query.QueryShardContext;
import org.elasticsearch.search.suggest.SuggestionSearchContext;
import org.elasticsearch.search.suggest.completion.context.ContextMapping;
import org.elasticsearch.search.suggest.completion.context.ContextMappings;
-import org.elasticsearch.search.suggest.completion2x.context.ContextMapping.ContextQuery;
import java.util.Collections;
import java.util.List;
@@ -42,17 +40,11 @@ public class CompletionSuggestionContext extends SuggestionSearchContext.Suggest
private FuzzyOptions fuzzyOptions;
private RegexOptions regexOptions;
private Map<String, List<ContextMapping.InternalQueryContext>> queryContexts = Collections.emptyMap();
- private CompletionFieldMapper2x.CompletionFieldType fieldType2x;
- private List<ContextQuery> contextQueries;
CompletionFieldMapper.CompletionFieldType getFieldType() {
return this.fieldType;
}
- CompletionFieldMapper2x.CompletionFieldType getFieldType2x() {
- return this.fieldType2x;
- }
-
void setFieldType(CompletionFieldMapper.CompletionFieldType fieldType) {
this.fieldType = fieldType;
}
@@ -113,15 +105,4 @@ public class CompletionSuggestionContext extends SuggestionSearchContext.Suggest
return query;
}
- public void setFieldType2x(CompletionFieldMapper2x.CompletionFieldType type) {
- this.fieldType2x = type;
- }
-
- public void setContextQueries(List<ContextQuery> contextQueries) {
- this.contextQueries = contextQueries;
- }
-
- public List<ContextQuery> getContextQueries() {
- return contextQueries;
- }
}
diff --git a/core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java b/core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java
index bd1449bbfe..9d5838b4b2 100644
--- a/core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java
+++ b/core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java
@@ -29,8 +29,8 @@ import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.XContentParser.Token;
+import org.elasticsearch.index.mapper.BaseGeoPointFieldMapper;
import org.elasticsearch.index.mapper.FieldMapper;
-import org.elasticsearch.index.mapper.GeoPointFieldMapper;
import org.elasticsearch.index.mapper.ParseContext;
import org.elasticsearch.index.mapper.ParseContext.Document;
import org.elasticsearch.index.query.QueryParseContext;
@@ -140,7 +140,7 @@ public class GeoContextMapping extends ContextMapping<GeoQueryContext> {
public Set<CharSequence> parseContext(ParseContext parseContext, XContentParser parser) throws IOException, ElasticsearchParseException {
if (fieldName != null) {
FieldMapper mapper = parseContext.docMapper().mappers().getMapper(fieldName);
- if (!(mapper instanceof GeoPointFieldMapper)) {
+ if (!(mapper instanceof BaseGeoPointFieldMapper)) {
throw new ElasticsearchParseException("referenced field must be mapped to geo_point");
}
}