mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-24 17:09:48 +00:00
some queries/filters did not end at the correct state when used as inner json elements
This commit is contained in:
parent
bfc5ad7b92
commit
e6b5ec7aaa
@ -33,7 +33,8 @@ public interface JsonFilterParser extends IndexComponent {
|
||||
String name();
|
||||
|
||||
/**
|
||||
* Parses the into a query from the current json parser location.
|
||||
* Parses the into a filter from the current json parser location. Will be at "START_OBJECT" location,
|
||||
* and should end when the token is at the matching "END_OBJECT".
|
||||
*/
|
||||
Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException;
|
||||
}
|
@ -33,7 +33,8 @@ public interface JsonQueryParser extends IndexComponent {
|
||||
String name();
|
||||
|
||||
/**
|
||||
* Parses the into a query from the current json parser location.
|
||||
* Parses the into a query from the current json parser location. Will be at "START_OBJECT" location,
|
||||
* and should end when the token is at the matching "END_OBJECT".
|
||||
*/
|
||||
Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException;
|
||||
}
|
||||
|
@ -54,10 +54,7 @@ public class PrefixJsonFilterParser extends AbstractIndexComponent implements Js
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
}
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
jp.nextToken();
|
||||
|
@ -55,10 +55,7 @@ public class PrefixJsonQueryParser extends AbstractIndexComponent implements Jso
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
}
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
|
||||
|
@ -53,13 +53,14 @@ public class RangeJsonFilterParser extends AbstractIndexComponent implements Jso
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
}
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
|
||||
// now, we move after the field name, which starts the object
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.START_OBJECT;
|
||||
|
||||
String from = null;
|
||||
String to = null;
|
||||
boolean includeLower = true;
|
||||
@ -90,6 +91,10 @@ public class RangeJsonFilterParser extends AbstractIndexComponent implements Jso
|
||||
}
|
||||
}
|
||||
|
||||
// move to the next end object, to close the field name
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.END_OBJECT;
|
||||
|
||||
Filter filter = null;
|
||||
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
||||
if (smartNameFieldMappers != null) {
|
||||
|
@ -53,10 +53,7 @@ public class RangeJsonQueryParser extends AbstractIndexComponent implements Json
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
}
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
|
||||
@ -93,6 +90,10 @@ public class RangeJsonQueryParser extends AbstractIndexComponent implements Json
|
||||
}
|
||||
}
|
||||
|
||||
// move to the next end object, to close the field name
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.END_OBJECT;
|
||||
|
||||
Query query = null;
|
||||
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
||||
if (smartNameFieldMappers != null) {
|
||||
|
@ -54,10 +54,7 @@ public class TermJsonFilterParser extends AbstractIndexComponent implements Json
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
}
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
|
||||
|
@ -54,14 +54,10 @@ public class TermJsonQueryParser extends AbstractIndexComponent implements JsonQ
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
}
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
|
||||
|
||||
String value = null;
|
||||
float boost = 1.0f;
|
||||
token = jp.nextToken();
|
||||
@ -78,6 +74,7 @@ public class TermJsonQueryParser extends AbstractIndexComponent implements JsonQ
|
||||
}
|
||||
}
|
||||
}
|
||||
jp.nextToken();
|
||||
} else {
|
||||
value = jp.getText();
|
||||
// move to the next token
|
||||
|
@ -55,10 +55,7 @@ public class TermsJsonFilterParser extends AbstractIndexComponent implements Jso
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
}
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
|
||||
|
@ -55,10 +55,7 @@ public class WildcardJsonQueryParser extends AbstractIndexComponent implements J
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
}
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
|
||||
@ -79,6 +76,7 @@ public class WildcardJsonQueryParser extends AbstractIndexComponent implements J
|
||||
}
|
||||
}
|
||||
}
|
||||
jp.nextToken();
|
||||
} else {
|
||||
value = jp.getText();
|
||||
jp.nextToken();
|
||||
|
@ -47,6 +47,7 @@ import static org.hamcrest.Matchers.*;
|
||||
/**
|
||||
* @author kimchy
|
||||
*/
|
||||
@Test
|
||||
public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
private final Index index = new Index("test");
|
||||
@ -377,6 +378,45 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
assertThat(((TermFilter) filteredQuery.getFilter()).getTerm(), equalTo(new Term("name.last", "banon")));
|
||||
}
|
||||
|
||||
@Test public void testFilteredQuery2() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/filtered-query2.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
assertThat(((TermQuery) filteredQuery.getQuery()).getTerm(), equalTo(new Term("name.first", "shay")));
|
||||
assertThat(((TermFilter) filteredQuery.getFilter()).getTerm(), equalTo(new Term("name.last", "banon")));
|
||||
}
|
||||
|
||||
@Test public void testFilteredQuery3() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/filtered-query3.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
assertThat(((TermQuery) filteredQuery.getQuery()).getTerm(), equalTo(new Term("name.first", "shay")));
|
||||
|
||||
Filter filter = filteredQuery.getFilter();
|
||||
assertThat(filter, instanceOf(NumericRangeFilter.class));
|
||||
NumericRangeFilter rangeFilter = (NumericRangeFilter) filter;
|
||||
assertThat(rangeFilter.getField(), equalTo("age"));
|
||||
assertThat(rangeFilter.getMin().intValue(), equalTo(23));
|
||||
assertThat(rangeFilter.getMax().intValue(), equalTo(54));
|
||||
}
|
||||
|
||||
@Test public void testFilteredQuery4() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/filtered-query4.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
WildcardQuery wildcardQuery = (WildcardQuery) filteredQuery.getQuery();
|
||||
assertThat(wildcardQuery.getTerm(), equalTo(new Term("name.first", "sh*")));
|
||||
assertThat((double) wildcardQuery.getBoost(), closeTo(1.1, 0.001));
|
||||
|
||||
assertThat(((TermFilter) filteredQuery.getFilter()).getTerm(), equalTo(new Term("name.last", "banon")));
|
||||
}
|
||||
|
||||
@Test public void testTermsFilterQueryBuilder() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
Query parsedQuery = queryParser.parse(filteredQuery(termQuery("name.first", "shay"), termsFilter("name.last", "banon", "kimchy")).build());
|
||||
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
filteredQuery : {
|
||||
filter : {
|
||||
term : { "name.last" : "banon"}
|
||||
},
|
||||
query : {
|
||||
term : { "name.first" : "shay" }
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
filteredQuery : {
|
||||
filter : {
|
||||
range : {
|
||||
age : { from : "23", to : "54", includeLower : true, includeUpper: false}
|
||||
}
|
||||
},
|
||||
query : {
|
||||
term : { "name.first" : "shay" }
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
filteredQuery : {
|
||||
query : {
|
||||
wildcard : { "name.first" : {wildcard : "sh*", boost : 1.1} }
|
||||
},
|
||||
filter : {
|
||||
term : { "name.last" : "banon"}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user