Skip to content

Commit

Permalink
Query DSL: filtered query to support null filter or {} filter (in whi…
Browse files Browse the repository at this point in the history
…ch case, just the query is executed), closes #1900.
  • Loading branch information
kimchy committed May 2, 2012
1 parent 300fb4f commit f8e6cc6
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,13 @@

package org.elasticsearch.index.query;

import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.xcontent.XContentBuilder;

import java.io.IOException;

/**
* A query that applies a filter to the results of another query.
*
*
*/
public class FilteredQueryBuilder extends BaseQueryBuilder {

Expand All @@ -40,9 +39,9 @@ public class FilteredQueryBuilder extends BaseQueryBuilder {
* A query that applies a filter to the results of another query.
*
* @param queryBuilder The query to apply the filter to
* @param filterBuilder The filter to apply on the query
* @param filterBuilder The filter to apply on the query (Can be null)
*/
public FilteredQueryBuilder(QueryBuilder queryBuilder, FilterBuilder filterBuilder) {
public FilteredQueryBuilder(QueryBuilder queryBuilder, @Nullable FilterBuilder filterBuilder) {
this.queryBuilder = queryBuilder;
this.filterBuilder = filterBuilder;
}
Expand All @@ -61,8 +60,10 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
builder.startObject(FilteredQueryParser.NAME);
builder.field("query");
queryBuilder.toXContent(builder, params);
builder.field("filter");
filterBuilder.toXContent(builder, params);
if (filterBuilder != null) {
builder.field("filter");
filterBuilder.toXContent(builder, params);
}
if (boost != -1) {
builder.field("boost", boost);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,9 @@ public Query parse(QueryParseContext parseContext) throws IOException, QueryPars
if (query == null) {
throw new QueryParsingException(parseContext.index(), "[filtered] requires 'query' element");
}
// we allow for null filter, so it makes compositions on the client side to be simpler
if (filter == null) {
throw new QueryParsingException(parseContext.index(), "[filtered] requires 'filter' element");
return query;
}

// cache if required
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@

/**
* A static factory for simple "import static" usage.
*
*
*/
public abstract class QueryBuilders {

Expand Down Expand Up @@ -389,7 +387,7 @@ public static FieldMaskingSpanQueryBuilder fieldMaskingSpanQuery(SpanQueryBuilde
* @param filterBuilder The filter to apply on the query
* @deprecated Use filteredQuery instead (rename)
*/
public static FilteredQueryBuilder filtered(QueryBuilder queryBuilder, FilterBuilder filterBuilder) {
public static FilteredQueryBuilder filtered(QueryBuilder queryBuilder, @Nullable FilterBuilder filterBuilder) {
return new FilteredQueryBuilder(queryBuilder, filterBuilder);
}

Expand All @@ -399,7 +397,7 @@ public static FilteredQueryBuilder filtered(QueryBuilder queryBuilder, FilterBui
* @param queryBuilder The query to apply the filter to
* @param filterBuilder The filter to apply on the query
*/
public static FilteredQueryBuilder filteredQuery(QueryBuilder queryBuilder, FilterBuilder filterBuilder) {
public static FilteredQueryBuilder filteredQuery(QueryBuilder queryBuilder, @Nullable FilterBuilder filterBuilder) {
return new FilteredQueryBuilder(queryBuilder, filterBuilder);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,10 @@ public Filter parseInnerFilter() throws IOException, QueryParsingException {
}
token = parser.nextToken();
if (token != XContentParser.Token.FIELD_NAME) {
// empty filter
if (token == XContentParser.Token.END_OBJECT || token == XContentParser.Token.VALUE_NULL) {
return null;
}
throw new QueryParsingException(index, "[_na] filter malformed, no field after start_object");
}
String filterName = parser.currentName();
Expand Down

0 comments on commit f8e6cc6

Please sign in to comment.