Fixes ignore_malformed behaviour for ip fields
This commit is contained in:
parent
dc4c8c2693
commit
68c043f730
|
@ -37,6 +37,7 @@ import org.apache.lucene.search.Filter;
|
|||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.store.ByteArrayDataOutput;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.elasticsearch.ElasticsearchIllegalArgumentException;
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.common.Explicit;
|
||||
import org.elasticsearch.common.Nullable;
|
||||
|
@ -235,7 +236,7 @@ public abstract class NumberFieldMapper<T extends Number> extends AbstractFieldM
|
|||
RuntimeException e = null;
|
||||
try {
|
||||
innerParseCreateField(context, fields);
|
||||
} catch (IllegalArgumentException e1) {
|
||||
} catch (IllegalArgumentException | ElasticsearchIllegalArgumentException e1) {
|
||||
e = e1;
|
||||
} catch (MapperParsingException e2) {
|
||||
e = e2;
|
||||
|
|
|
@ -20,14 +20,20 @@
|
|||
package org.elasticsearch.index.mapper.ip;
|
||||
|
||||
import org.elasticsearch.ElasticsearchIllegalArgumentException;
|
||||
import org.elasticsearch.bootstrap.Elasticsearch;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||
import org.elasticsearch.index.mapper.DocumentMapper;
|
||||
import org.elasticsearch.index.mapper.MapperParsingException;
|
||||
import org.elasticsearch.index.mapper.ParsedDocument;
|
||||
import org.elasticsearch.test.ElasticsearchSingleNodeTest;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.elasticsearch.common.settings.ImmutableSettings.settingsBuilder;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.instanceOf;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.notNullValue;
|
||||
import static org.hamcrest.Matchers.nullValue;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -77,4 +83,45 @@ public class SimpleIpMappingTests extends ElasticsearchSingleNodeTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIgnoreMalformedOption() throws Exception {
|
||||
String mapping = XContentFactory.jsonBuilder().startObject().startObject("type").startObject("properties").startObject("field1")
|
||||
.field("type", "ip").field("ignore_malformed", true).endObject().startObject("field2").field("type", "ip")
|
||||
.field("ignore_malformed", false).endObject().startObject("field3").field("type", "ip").endObject().endObject().endObject()
|
||||
.endObject().string();
|
||||
|
||||
DocumentMapper defaultMapper = createIndex("test").mapperService().documentMapperParser().parse(mapping);
|
||||
|
||||
ParsedDocument doc = defaultMapper.parse("type", "1",
|
||||
XContentFactory.jsonBuilder().startObject().field("field1", "").field("field2", "10.20.30.40").endObject().bytes());
|
||||
assertThat(doc.rootDoc().getField("field1"), nullValue());
|
||||
assertThat(doc.rootDoc().getField("field2"), notNullValue());
|
||||
|
||||
try {
|
||||
defaultMapper.parse("type", "1", XContentFactory.jsonBuilder().startObject().field("field2", "").endObject().bytes());
|
||||
} catch (MapperParsingException e) {
|
||||
assertThat(e.getCause(), instanceOf(ElasticsearchIllegalArgumentException.class));
|
||||
}
|
||||
|
||||
// Verify that the default is false
|
||||
try {
|
||||
defaultMapper.parse("type", "1", XContentFactory.jsonBuilder().startObject().field("field3", "").endObject().bytes());
|
||||
} catch (MapperParsingException e) {
|
||||
assertThat(e.getCause(), instanceOf(ElasticsearchIllegalArgumentException.class));
|
||||
}
|
||||
|
||||
// Unless the global ignore_malformed option is set to true
|
||||
Settings indexSettings = settingsBuilder().put("index.mapping.ignore_malformed", true).build();
|
||||
defaultMapper = createIndex("test2", indexSettings).mapperService().documentMapperParser().parse(mapping);
|
||||
doc = defaultMapper.parse("type", "1", XContentFactory.jsonBuilder().startObject().field("field3", "").endObject().bytes());
|
||||
assertThat(doc.rootDoc().getField("field3"), nullValue());
|
||||
|
||||
// This should still throw an exception, since field2 is specifically set to ignore_malformed=false
|
||||
try {
|
||||
defaultMapper.parse("type", "1", XContentFactory.jsonBuilder().startObject().field("field2", "").endObject().bytes());
|
||||
} catch (MapperParsingException e) {
|
||||
assertThat(e.getCause(), instanceOf(ElasticsearchIllegalArgumentException.class));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue