mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-17 10:25:15 +00:00
Provide informative error message in case of unknown suggestion context. (#24241)
Provide a list of available contexts when you send an unknown context to the completion suggester.
This commit is contained in:
parent
931198688c
commit
373edee29a
@ -81,7 +81,9 @@ public class ContextMappings implements ToXContent {
|
||||
public ContextMapping get(String name) {
|
||||
ContextMapping contextMapping = contextNameMap.get(name);
|
||||
if (contextMapping == null) {
|
||||
throw new IllegalArgumentException("Unknown context name[" + name + "], must be one of " + contextNameMap.size());
|
||||
List<String> keys = new ArrayList<>(contextNameMap.keySet());
|
||||
Collections.sort(keys);
|
||||
throw new IllegalArgumentException("Unknown context name [" + name + "], must be one of " + keys.toString());
|
||||
}
|
||||
return contextMapping;
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.common.xcontent.json.JsonXContent;
|
||||
import org.elasticsearch.index.mapper.CompletionFieldMapper.CompletionFieldType;
|
||||
import org.elasticsearch.index.mapper.DocumentMapper;
|
||||
import org.elasticsearch.index.mapper.FieldMapper;
|
||||
import org.elasticsearch.index.mapper.MappedFieldType;
|
||||
@ -673,6 +674,31 @@ public class CategoryContextMappingTests extends ESSingleNodeTestCase {
|
||||
Exception e = expectThrows(ElasticsearchParseException.class, () -> mapping.parseQueryContext(createParseContext(parser)));
|
||||
assertEquals("category context must be an object, string, number or boolean", e.getMessage());
|
||||
}
|
||||
|
||||
public void testUnknownQueryContextParsing() throws Exception {
|
||||
String mapping = jsonBuilder().startObject().startObject("type1")
|
||||
.startObject("properties").startObject("completion")
|
||||
.field("type", "completion")
|
||||
.startArray("contexts")
|
||||
.startObject()
|
||||
.field("name", "ctx")
|
||||
.field("type", "category")
|
||||
.endObject()
|
||||
.startObject()
|
||||
.field("name", "type")
|
||||
.field("type", "category")
|
||||
.endObject()
|
||||
.endArray()
|
||||
.endObject().endObject()
|
||||
.endObject().endObject().string();
|
||||
|
||||
DocumentMapper defaultMapper = createIndex("test").mapperService().documentMapperParser().parse("type1", new CompressedXContent(mapping));
|
||||
FieldMapper fieldMapper = defaultMapper.mappers().getMapper("completion");
|
||||
CompletionFieldType completionFieldType = (CompletionFieldType) fieldMapper.fieldType();
|
||||
|
||||
Exception e = expectThrows(IllegalArgumentException.class, () -> completionFieldType.getContextMappings().get("brand"));
|
||||
assertEquals("Unknown context name [brand], must be one of [ctx, type]", e.getMessage());
|
||||
}
|
||||
|
||||
public void testParsingContextFromDocument() throws Exception {
|
||||
CategoryContextMapping mapping = ContextBuilder.category("cat").field("category").build();
|
||||
|
Loading…
x
Reference in New Issue
Block a user