summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/src/main/java/org/elasticsearch/search/suggest/completion/context/CategoryContextMapping.java9
-rw-r--r--core/src/test/java/org/elasticsearch/search/suggest/ContextCompletionSuggestSearchIT.java24
2 files changed, 21 insertions, 12 deletions
diff --git a/core/src/main/java/org/elasticsearch/search/suggest/completion/context/CategoryContextMapping.java b/core/src/main/java/org/elasticsearch/search/suggest/completion/context/CategoryContextMapping.java
index 38e31ec92a..92091d8b69 100644
--- a/core/src/main/java/org/elasticsearch/search/suggest/completion/context/CategoryContextMapping.java
+++ b/core/src/main/java/org/elasticsearch/search/suggest/completion/context/CategoryContextMapping.java
@@ -25,6 +25,7 @@ import org.elasticsearch.Version;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.XContentParser.Token;
+import org.elasticsearch.index.mapper.KeywordFieldMapper;
import org.elasticsearch.index.mapper.ParseContext;
import org.elasticsearch.index.mapper.ParseContext.Document;
import org.elasticsearch.index.query.QueryParseContext;
@@ -136,10 +137,14 @@ public class CategoryContextMapping extends ContextMapping<CategoryQueryContext>
IndexableField[] fields = document.getFields(fieldName);
values = new HashSet<>(fields.length);
for (IndexableField field : fields) {
- values.add(field.stringValue());
+ if (field.fieldType() instanceof KeywordFieldMapper.KeywordFieldType) {
+ values.add(field.binaryValue().utf8ToString());
+ } else {
+ values.add(field.stringValue());
+ }
}
}
- return (values == null) ? Collections.<CharSequence>emptySet() : values;
+ return (values == null) ? Collections.emptySet() : values;
}
@Override
diff --git a/core/src/test/java/org/elasticsearch/search/suggest/ContextCompletionSuggestSearchIT.java b/core/src/test/java/org/elasticsearch/search/suggest/ContextCompletionSuggestSearchIT.java
index a3ea5e9932..eb30c32cf6 100644
--- a/core/src/test/java/org/elasticsearch/search/suggest/ContextCompletionSuggestSearchIT.java
+++ b/core/src/test/java/org/elasticsearch/search/suggest/ContextCompletionSuggestSearchIT.java
@@ -19,7 +19,6 @@
package org.elasticsearch.search.suggest;
import com.carrotsearch.randomizedtesting.generators.RandomStrings;
-
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.index.IndexResponse;
@@ -660,37 +659,42 @@ public class ContextCompletionSuggestSearchIT extends ESIntegTestCase {
.field("preserve_separators", completionMappingBuilder.preserveSeparators)
.field("preserve_position_increments", completionMappingBuilder.preservePositionIncrements);
+ List<String> categoryContextFields = new ArrayList<>();
if (completionMappingBuilder.contextMappings != null) {
- mapping = mapping.startArray("contexts");
+ mapping.startArray("contexts");
for (Map.Entry<String, ContextMapping> contextMapping : completionMappingBuilder.contextMappings.entrySet()) {
- mapping = mapping.startObject()
+ mapping.startObject()
.field("name", contextMapping.getValue().name())
.field("type", contextMapping.getValue().type().name());
switch (contextMapping.getValue().type()) {
case CATEGORY:
final String fieldName = ((CategoryContextMapping) contextMapping.getValue()).getFieldName();
if (fieldName != null) {
- mapping = mapping.field("path", fieldName);
+ mapping.field("path", fieldName);
+ categoryContextFields.add(fieldName);
}
break;
case GEO:
final String name = ((GeoContextMapping) contextMapping.getValue()).getFieldName();
- mapping = mapping
- .field("precision", ((GeoContextMapping) contextMapping.getValue()).getPrecision());
+ mapping.field("precision", ((GeoContextMapping) contextMapping.getValue()).getPrecision());
if (name != null) {
mapping.field("path", name);
}
break;
}
- mapping = mapping.endObject();
+ mapping.endObject();
}
- mapping = mapping.endArray();
+ mapping.endArray();
}
- mapping = mapping.endObject()
- .endObject().endObject()
+ mapping.endObject();
+ for (String fieldName : categoryContextFields) {
+ mapping.startObject(fieldName)
+ .field("type", randomBoolean() ? "keyword" : "text")
.endObject();
+ }
+ mapping.endObject().endObject().endObject();
assertAcked(client().admin().indices().prepareCreate(INDEX)
.setSettings(Settings.builder().put(indexSettings()).put(settings))