diff options
author | Nicholas Knize <nknize@gmail.com> | 2017-05-19 15:00:48 -0500 |
---|---|---|
committer | Nicholas Knize <nknize@gmail.com> | 2017-05-22 11:41:16 -0500 |
commit | b41ad0a9dd997b270547154bf03ecb0e4f6c8772 (patch) | |
tree | 82a20ad2115807a0dcab446439e81bc4d1683903 | |
parent | 6f19c7097843e98682b0b09bf5a17b9b88c74614 (diff) |
Fix RangeFieldMapper rangeQuery to properly handle relations
This commit fixes the RangeFieldMapper and RangeQueryBuilder to pass the correct relation to the RangeQuery when performing a range query over range fields.
4 files changed, 22 insertions, 11 deletions
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 f1bb866377..12854c2578 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java @@ -279,12 +279,6 @@ public class RangeFieldMapper extends FieldMapper { return query; } - @Override - public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower, boolean includeUpper, - QueryShardContext context) { - return rangeQuery(lowerTerm, upperTerm, includeLower, includeUpper, ShapeRelation.INTERSECTS, context); - } - public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower, boolean includeUpper, ShapeRelation relation, QueryShardContext context) { failIfNotIndexed(); diff --git a/core/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java index 033488759e..23d37a2743 100644 --- a/core/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java +++ b/core/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java @@ -501,9 +501,9 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i query = ((DateFieldMapper.DateFieldType) mapper).rangeQuery(from, to, includeLower, includeUpper, timeZone, getForceDateParser(), context); - } else if (mapper instanceof RangeFieldMapper.RangeFieldType && mapper.typeName() == RangeFieldMapper.RangeType.DATE.name) { + } else if (mapper instanceof RangeFieldMapper.RangeFieldType) { DateMathParser forcedDateParser = null; - if (this.format != null) { + if (mapper.typeName() == RangeFieldMapper.RangeType.DATE.name && this.format != null) { forcedDateParser = new DateMathParser(this.format); } query = ((RangeFieldMapper.RangeFieldType) mapper).rangeQuery(from, to, includeLower, includeUpper, diff --git a/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java index ddf21f1d6f..c1f212aaef 100644 --- a/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java @@ -84,9 +84,6 @@ public class RangeQueryBuilderTests extends AbstractQueryTestCase<RangeQueryBuil query.format("yyyy-MM-dd'T'HH:mm:ss.SSSZZ"); } } - if (query.fieldName().equals(DATE_RANGE_FIELD_NAME)) { - query.relation(RandomPicks.randomFrom(random(), ShapeRelation.values()).getRelationName()); - } break; case 2: default: @@ -102,6 +99,9 @@ public class RangeQueryBuilderTests extends AbstractQueryTestCase<RangeQueryBuil if (randomBoolean()) { query.to(null); } + if (query.fieldName().equals(INT_RANGE_FIELD_NAME) || query.fieldName().equals(DATE_RANGE_FIELD_NAME)) { + query.relation(RandomPicks.randomFrom(random(), ShapeRelation.values()).getRelationName()); + } return query; } diff --git a/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java b/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java index 47c0716075..3a9f04ed4f 100644 --- a/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java +++ b/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java @@ -37,6 +37,7 @@ import org.elasticsearch.index.query.MatchQueryBuilder; import org.elasticsearch.index.query.MultiMatchQueryBuilder; import org.elasticsearch.index.query.Operator; import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.index.query.RangeQueryBuilder; import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.index.query.WrapperQueryBuilder; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; @@ -2090,4 +2091,20 @@ public class SearchQueryIT extends ESIntegTestCase { assertThat(i + " expected: " + first + " actual: " + actual, Float.compare(first, actual), equalTo(0)); } } + + public void testRangeQueryRangeFields_24744() throws Exception { + assertAcked(prepareCreate("test") + .addMapping("type1", "int_range", "type=integer_range")); + + client().prepareIndex("test", "type1", "1") + .setSource(jsonBuilder() + .startObject() + .startObject("int_range").field("gte", 10).field("lte", 20).endObject() + .endObject()).get(); + refresh(); + + RangeQueryBuilder range = new RangeQueryBuilder("int_range").relation("intersects").from(Integer.MIN_VALUE).to(Integer.MAX_VALUE); + SearchResponse searchResponse = client().prepareSearch("test").setQuery(range).get(); + assertHitCount(searchResponse, 1); + } } |