diff --git a/core/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java index 0f0b064e52391..9a00ddebe83ba 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java @@ -357,7 +357,9 @@ protected void parseCreateField(ParseContext context, List field } else { XContentParser parser = context.parser(); final XContentParser.Token start = parser.currentToken(); - if (start == XContentParser.Token.START_OBJECT) { + if (start == XContentParser.Token.VALUE_NULL) { + return; + } else if (start == XContentParser.Token.START_OBJECT) { RangeFieldType fieldType = fieldType(); RangeType rangeType = fieldType.rangeType; String fieldName = null; diff --git a/core/src/test/java/org/elasticsearch/index/mapper/RangeFieldMapperTests.java b/core/src/test/java/org/elasticsearch/index/mapper/RangeFieldMapperTests.java index eea71525c705c..4b705f97a31ba 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/RangeFieldMapperTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/RangeFieldMapperTests.java @@ -363,6 +363,15 @@ protected void doTestNullValue(String type) throws IOException { + InetAddresses.toAddrString(InetAddresses.forString("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")); } assertThat(storedField.stringValue(), containsString(strVal)); + + // test null range + doc = mapper.parse(SourceToParse.source("test", "type", "1", XContentFactory.jsonBuilder() + .startObject() + .nullField("field") + .endObject() + .bytes(), + XContentType.JSON)); + assertNull(doc.rootDoc().get("field")); } public void testNoBounds() throws Exception { diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/range/10_basic.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/range/10_basic.yml index 4bf6e3e2b4a4d..56e2e91b4ade3 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/range/10_basic.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/range/10_basic.yml @@ -45,6 +45,12 @@ setup: id: 3 body: { "integer_range" : { "gte": 4, "lte": 5 } } + - do: + index: + index: test + type: doc + id: 4 + body: { "integer_range" : null } - do: indices.refresh: {} @@ -79,6 +85,12 @@ setup: - match: { hits.total: 0 } + - do: + search: + body: { "query" : { "match_all": {} } } + + - match: { hits.total: 4 } + --- "Long range":