Skip to content

Commit 5f7d0ce

Browse files
committed
Query DSL: Range - support lt/lte/gt/gte, closes #114.
1 parent 33086fb commit 5f7d0ce

File tree

4 files changed

+68
-0
lines changed

4 files changed

+68
-0
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/index/query/json/RangeJsonFilterParser.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,27 @@ public class RangeJsonFilterParser extends AbstractIndexComponent implements Jso
100100
} else {
101101
includeUpper = token == JsonToken.VALUE_TRUE;
102102
}
103+
} else if ("gte".equals(currentFieldName)) {
104+
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
105+
from = null;
106+
} else {
107+
from = jp.getText();
108+
}
109+
includeLower = true;
110+
} else if ("lt".equals(currentFieldName)) {
111+
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
112+
to = null;
113+
} else {
114+
to = jp.getText();
115+
}
116+
includeUpper = false;
117+
} else if ("lte".equals(currentFieldName)) {
118+
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
119+
to = null;
120+
} else {
121+
to = jp.getText();
122+
}
123+
includeUpper = true;
103124
}
104125
}
105126
}

modules/elasticsearch/src/main/java/org/elasticsearch/index/query/json/RangeJsonQueryParser.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,34 @@ public class RangeJsonQueryParser extends AbstractIndexComponent implements Json
103103
} else {
104104
boost = jp.getFloatValue();
105105
}
106+
} else if ("gt".equals(currentFieldName)) {
107+
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
108+
from = null;
109+
} else {
110+
from = jp.getText();
111+
}
112+
includeLower = false;
113+
} else if ("gte".equals(currentFieldName)) {
114+
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
115+
from = null;
116+
} else {
117+
from = jp.getText();
118+
}
119+
includeLower = true;
120+
} else if ("lt".equals(currentFieldName)) {
121+
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
122+
to = null;
123+
} else {
124+
to = jp.getText();
125+
}
126+
includeUpper = false;
127+
} else if ("lte".equals(currentFieldName)) {
128+
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
129+
to = null;
130+
} else {
131+
to = jp.getText();
132+
}
133+
includeUpper = true;
106134
}
107135
}
108136
}

modules/elasticsearch/src/test/java/org/elasticsearch/index/query/json/SimpleJsonIndexQueryParserTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,20 @@ public class SimpleJsonIndexQueryParserTests {
379379
assertThat(rangeQuery.includesMax(), equalTo(false));
380380
}
381381

382+
@Test public void testRange2Query() throws IOException {
383+
IndexQueryParser queryParser = newQueryParser();
384+
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/range2.json");
385+
Query parsedQuery = queryParser.parse(query);
386+
// since age is automatically registered in data, we encode it as numeric
387+
assertThat(parsedQuery, instanceOf(NumericRangeQuery.class));
388+
NumericRangeQuery rangeQuery = (NumericRangeQuery) parsedQuery;
389+
assertThat(rangeQuery.getField(), equalTo("age"));
390+
assertThat(rangeQuery.getMin().intValue(), equalTo(23));
391+
assertThat(rangeQuery.getMax().intValue(), equalTo(54));
392+
assertThat(rangeQuery.includesMin(), equalTo(true));
393+
assertThat(rangeQuery.includesMax(), equalTo(false));
394+
}
395+
382396
@Test public void testRangeFilteredQueryBuilder() throws IOException {
383397
IndexQueryParser queryParser = newQueryParser();
384398
Query parsedQuery = queryParser.parse(filtered(termQuery("name.first", "shay"), rangeFilter("age").from(23).to(54).includeLower(true).includeUpper(false)));
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
range : {
3+
age : { gte : "23", lt : "54" }
4+
}
5+
}

0 commit comments

Comments
 (0)