mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-16 09:54:55 +00:00
Query DSL: Simplify not filter to accept the filter directly, without a wrapping filter
element, closes #992.
This commit is contained in:
parent
ec1f0b16f4
commit
0f1655cf22
@ -61,6 +61,9 @@ public class NotFilterParser extends AbstractIndexComponent implements XContentF
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("filter".equals(currentFieldName)) {
|
||||
filter = parseContext.parseInnerFilter();
|
||||
} else {
|
||||
// its the filter, and the name is the field
|
||||
filter = parseContext.parseInnerFilter(currentFieldName);
|
||||
}
|
||||
} else if (token.isValue()) {
|
||||
if ("_cache".equals(currentFieldName)) {
|
||||
|
@ -175,6 +175,20 @@ public class QueryParseContext {
|
||||
return result;
|
||||
}
|
||||
|
||||
public Filter parseInnerFilter(String filterName) throws IOException, QueryParsingException {
|
||||
XContentFilterParser filterParser = indexQueryParser.filterParser(filterName);
|
||||
if (filterParser == null) {
|
||||
throw new QueryParsingException(index, "No filter registered for [" + filterName + "]");
|
||||
}
|
||||
Filter result = filterParser.parse(this);
|
||||
// don't move to the nextToken in this case...
|
||||
// if (parser.currentToken() == XContentParser.Token.END_OBJECT || parser.currentToken() == XContentParser.Token.END_ARRAY) {
|
||||
// // if we are at END_OBJECT, move to the next one...
|
||||
// parser.nextToken();
|
||||
// }
|
||||
return result;
|
||||
}
|
||||
|
||||
public FieldMapper fieldMapper(String name) {
|
||||
FieldMappers fieldMappers = indexQueryParser.mapperService.smartNameFieldMappers(name);
|
||||
if (fieldMappers == null) {
|
||||
|
@ -819,6 +819,31 @@ public class SimpleIndexQueryParserTests {
|
||||
Query parsedQuery = queryParser.parse(query).query();
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
assertThat(((TermQuery) filteredQuery.getQuery()).getTerm(), equalTo(new Term("name.first", "shay")));
|
||||
|
||||
NotFilter notFilter = (NotFilter) filteredQuery.getFilter();
|
||||
assertThat(((TermFilter) notFilter.filter()).getTerm(), equalTo(new Term("name.first", "shay1")));
|
||||
}
|
||||
|
||||
@Test public void testNotFilteredQuery2() throws IOException {
|
||||
IndexQueryParser queryParser = queryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/not-filter2.json");
|
||||
Query parsedQuery = queryParser.parse(query).query();
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
assertThat(((TermQuery) filteredQuery.getQuery()).getTerm(), equalTo(new Term("name.first", "shay")));
|
||||
|
||||
NotFilter notFilter = (NotFilter) filteredQuery.getFilter();
|
||||
assertThat(((TermFilter) notFilter.filter()).getTerm(), equalTo(new Term("name.first", "shay1")));
|
||||
}
|
||||
|
||||
@Test public void testNotFilteredQuery3() throws IOException {
|
||||
IndexQueryParser queryParser = queryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/not-filter3.json");
|
||||
Query parsedQuery = queryParser.parse(query).query();
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
assertThat(((TermQuery) filteredQuery.getQuery()).getTerm(), equalTo(new Term("name.first", "shay")));
|
||||
|
||||
NotFilter notFilter = (NotFilter) filteredQuery.getFilter();
|
||||
assertThat(((TermFilter) notFilter.filter()).getTerm(), equalTo(new Term("name.first", "shay1")));
|
||||
|
@ -0,0 +1,16 @@
|
||||
{
|
||||
"filtered" : {
|
||||
"query" : {
|
||||
"term" : {
|
||||
"name.first" : "shay"
|
||||
}
|
||||
},
|
||||
"filter" : {
|
||||
"not" : {
|
||||
"term" : {
|
||||
"name.first" : "shay1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
{
|
||||
"filtered" : {
|
||||
"filter" : {
|
||||
"not" : {
|
||||
"term" : {
|
||||
"name.first" : "shay1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"query" : {
|
||||
"term" : {
|
||||
"name.first" : "shay"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user