Skip to content

Commit 06b82a4

Browse files
committed
Simplified range syntax when using a query string
closes elastic#2655
1 parent 4714a6a commit 06b82a4

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

src/main/java/org/apache/lucene/queryparser/classic/MapperQueryParser.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,23 @@ public Query getFieldQuery(String field, String queryText, boolean quoted) throw
231231
}
232232

233233
private Query getFieldQuerySingle(String field, String queryText, boolean quoted) throws ParseException {
234+
if (!quoted && queryText.length() > 1) {
235+
if (queryText.charAt(0) == '>') {
236+
if (queryText.length() > 2) {
237+
if (queryText.charAt(1) == '=') {
238+
return getRangeQuerySingle(field, queryText.substring(2), null, true, true);
239+
}
240+
}
241+
return getRangeQuerySingle(field, queryText.substring(1), null, false, true);
242+
} else if (queryText.charAt(0) == '<') {
243+
if (queryText.length() > 2) {
244+
if (queryText.charAt(1) == '=') {
245+
return getRangeQuerySingle(field, null, queryText.substring(2), true, true);
246+
}
247+
}
248+
return getRangeQuerySingle(field, null, queryText.substring(1), true, false);
249+
}
250+
}
234251
currentMapper = null;
235252
Analyzer oldAnalyzer = analyzer;
236253
try {
@@ -385,7 +402,7 @@ private Query getRangeQuerySingle(String field, String part1, String part2, bool
385402
currentMapper = fieldMappers.fieldMappers().mapper();
386403
if (currentMapper != null) {
387404
try {
388-
Query rangeQuery = currentMapper.rangeQuery(part1, part2, startInclusive, startInclusive, parseContext);
405+
Query rangeQuery = currentMapper.rangeQuery(part1, part2, startInclusive, endInclusive, parseContext);
389406
return wrapSmartNameQuery(rangeQuery, fieldMappers, parseContext);
390407
} catch (RuntimeException e) {
391408
if (settings.lenient()) {

src/test/java/org/elasticsearch/test/integration/search/query/SimpleQueryTests.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,4 +650,58 @@ public void testFuzzyQueryString() {
650650
assertThat("Failures " + Arrays.toString(searchResponse.shardFailures()), searchResponse.shardFailures().length, equalTo(0));
651651
assertThat(searchResponse.hits().totalHits(), equalTo(0l));
652652
}
653+
654+
@Test
655+
public void testSpecialRangeSyntaxInQueryString() {
656+
client.admin().indices().prepareDelete().execute().actionGet();
657+
658+
client.admin().indices().prepareCreate("test").setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", 1)).execute().actionGet();
659+
client.prepareIndex("test", "type1", "1").setSource("str", "kimchy", "date", "2012-02-01", "num", 12).execute().actionGet();
660+
client.prepareIndex("test", "type1", "2").setSource("str", "shay", "date", "2012-02-05", "num", 20).execute().actionGet();
661+
client.admin().indices().prepareRefresh().execute().actionGet();
662+
663+
SearchResponse searchResponse = client.prepareSearch()
664+
.setQuery(queryString("num:>19"))
665+
.execute().actionGet();
666+
assertThat("Failures " + Arrays.toString(searchResponse.shardFailures()), searchResponse.shardFailures().length, equalTo(0));
667+
assertThat(searchResponse.hits().totalHits(), equalTo(1l));
668+
assertThat(searchResponse.hits().getAt(0).id(), equalTo("2"));
669+
670+
searchResponse = client.prepareSearch()
671+
.setQuery(queryString("num:>20"))
672+
.execute().actionGet();
673+
assertThat("Failures " + Arrays.toString(searchResponse.shardFailures()), searchResponse.shardFailures().length, equalTo(0));
674+
assertThat(searchResponse.hits().totalHits(), equalTo(0l));
675+
676+
searchResponse = client.prepareSearch()
677+
.setQuery(queryString("num:>=20"))
678+
.execute().actionGet();
679+
assertThat("Failures " + Arrays.toString(searchResponse.shardFailures()), searchResponse.shardFailures().length, equalTo(0));
680+
assertThat(searchResponse.hits().totalHits(), equalTo(1l));
681+
assertThat(searchResponse.hits().getAt(0).id(), equalTo("2"));
682+
683+
searchResponse = client.prepareSearch()
684+
.setQuery(queryString("num:>11"))
685+
.execute().actionGet();
686+
assertThat("Failures " + Arrays.toString(searchResponse.shardFailures()), searchResponse.shardFailures().length, equalTo(0));
687+
assertThat(searchResponse.hits().totalHits(), equalTo(2l));
688+
689+
searchResponse = client.prepareSearch()
690+
.setQuery(queryString("num:<20"))
691+
.execute().actionGet();
692+
assertThat("Failures " + Arrays.toString(searchResponse.shardFailures()), searchResponse.shardFailures().length, equalTo(0));
693+
assertThat(searchResponse.hits().totalHits(), equalTo(1l));
694+
695+
searchResponse = client.prepareSearch()
696+
.setQuery(queryString("num:<=20"))
697+
.execute().actionGet();
698+
assertThat("Failures " + Arrays.toString(searchResponse.shardFailures()), searchResponse.shardFailures().length, equalTo(0));
699+
assertThat(searchResponse.hits().totalHits(), equalTo(2l));
700+
701+
searchResponse = client.prepareSearch()
702+
.setQuery(queryString("+num:>11 +num:<20"))
703+
.execute().actionGet();
704+
assertThat("Failures " + Arrays.toString(searchResponse.shardFailures()), searchResponse.shardFailures().length, equalTo(0));
705+
assertThat(searchResponse.hits().totalHits(), equalTo(1l));
706+
}
653707
}

0 commit comments

Comments
 (0)