From 655282a2c6321c6504fd958a5aaaf2929aaa74ca Mon Sep 17 00:00:00 2001 From: David Pilato Date: Tue, 12 Aug 2014 16:21:28 +0200 Subject: [PATCH] Remove `numeric_range` filter As done with #4034, `numeric_range` filter has been deprecated since 1.0.0. Closes #7108. --- .../index/query/FilterBuilders.java | 13 - .../query/NumericRangeFilterBuilder.java | 381 ------------------ .../index/query/NumericRangeFilterParser.java | 134 ------ .../indices/query/IndicesQueriesModule.java | 3 +- .../query/SimpleIndexQueryParserTests.java | 31 -- .../index/query/numeric_range-filter.json | 19 - .../search/query/SimpleQueryTests.java | 8 +- 7 files changed, 3 insertions(+), 586 deletions(-) delete mode 100644 src/main/java/org/elasticsearch/index/query/NumericRangeFilterBuilder.java delete mode 100644 src/main/java/org/elasticsearch/index/query/NumericRangeFilterParser.java delete mode 100644 src/test/java/org/elasticsearch/index/query/numeric_range-filter.json diff --git a/src/main/java/org/elasticsearch/index/query/FilterBuilders.java b/src/main/java/org/elasticsearch/index/query/FilterBuilders.java index 79a7ba6278d..b2a4fbe98cb 100644 --- a/src/main/java/org/elasticsearch/index/query/FilterBuilders.java +++ b/src/main/java/org/elasticsearch/index/query/FilterBuilders.java @@ -296,19 +296,6 @@ public abstract class FilterBuilders { return new RangeFilterBuilder(name); } - /** - * A filter that restricts search results to values that are within the given numeric range. Uses the - * field data cache (loading all the values for the specified field into memory) - * - * @param name The field name - * @deprecated The numeric_range filter will be removed at some point in time in favor for the range filter with - * the execution mode fielddata. - */ - @Deprecated - public static NumericRangeFilterBuilder numericRangeFilter(String name) { - return new NumericRangeFilterBuilder(name); - } - /** * A filter that simply wraps a query. * diff --git a/src/main/java/org/elasticsearch/index/query/NumericRangeFilterBuilder.java b/src/main/java/org/elasticsearch/index/query/NumericRangeFilterBuilder.java deleted file mode 100644 index c29bc659053..00000000000 --- a/src/main/java/org/elasticsearch/index/query/NumericRangeFilterBuilder.java +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.index.query; - -import org.elasticsearch.common.xcontent.XContentBuilder; - -import java.io.IOException; - -/** - * A filter that restricts search results to values that are within the given numeric range. - *

- *

Uses the field data cache (loading all the values for the specified field into memory). - * - * @deprecated This filter will be removed at some point in time in favor for the range filter with the execution - * mode fielddata. - */ -@Deprecated -public class NumericRangeFilterBuilder extends BaseFilterBuilder { - - private final String name; - - private Object from; - - private Object to; - - private boolean includeLower = true; - - private boolean includeUpper = true; - - private Boolean cache; - private String cacheKey; - - private String filterName; - - /** - * A filter that restricts search results to values that are within the given range. - * - * @param name The field name - */ - public NumericRangeFilterBuilder(String name) { - this.name = name; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder from(Object from) { - this.from = from; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder from(int from) { - this.from = from; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder from(long from) { - this.from = from; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder from(float from) { - this.from = from; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder from(double from) { - this.from = from; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gt(Object from) { - this.from = from; - this.includeLower = false; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gt(int from) { - this.from = from; - this.includeLower = false; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gt(long from) { - this.from = from; - this.includeLower = false; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gt(float from) { - this.from = from; - this.includeLower = false; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gt(double from) { - this.from = from; - this.includeLower = false; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gte(Object from) { - this.from = from; - this.includeLower = true; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gte(int from) { - this.from = from; - this.includeLower = true; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gte(long from) { - this.from = from; - this.includeLower = true; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gte(float from) { - this.from = from; - this.includeLower = true; - return this; - } - - /** - * The from part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder gte(double from) { - this.from = from; - this.includeLower = true; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder to(Object to) { - this.to = to; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder to(int to) { - this.to = to; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder to(long to) { - this.to = to; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder to(float to) { - this.to = to; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder to(double to) { - this.to = to; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lt(Object to) { - this.to = to; - this.includeUpper = false; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lt(int to) { - this.to = to; - this.includeUpper = false; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lt(long to) { - this.to = to; - this.includeUpper = false; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lt(float to) { - this.to = to; - this.includeUpper = false; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lt(double to) { - this.to = to; - this.includeUpper = false; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lte(Object to) { - this.to = to; - this.includeUpper = true; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lte(int to) { - this.to = to; - this.includeUpper = true; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lte(long to) { - this.to = to; - this.includeUpper = true; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lte(float to) { - this.to = to; - this.includeUpper = true; - return this; - } - - /** - * The to part of the filter query. Null indicates unbounded. - */ - public NumericRangeFilterBuilder lte(double to) { - this.to = to; - this.includeUpper = true; - return this; - } - - /** - * Should the lower bound be included or not. Defaults to true. - */ - public NumericRangeFilterBuilder includeLower(boolean includeLower) { - this.includeLower = includeLower; - return this; - } - - /** - * Should the upper bound be included or not. Defaults to true. - */ - public NumericRangeFilterBuilder includeUpper(boolean includeUpper) { - this.includeUpper = includeUpper; - return this; - } - - /** - * Sets the filter name for the filter that can be used when searching for matched_filters per hit. - */ - public NumericRangeFilterBuilder filterName(String filterName) { - this.filterName = filterName; - return this; - } - - /** - * Should the filter be cached or not. Defaults to false. - */ - public NumericRangeFilterBuilder cache(boolean cache) { - this.cache = cache; - return this; - } - - public NumericRangeFilterBuilder cacheKey(String cacheKey) { - this.cacheKey = cacheKey; - return this; - } - - @Override - protected void doXContent(XContentBuilder builder, Params params) throws IOException { - builder.startObject(NumericRangeFilterParser.NAME); - - builder.startObject(name); - builder.field("from", from); - builder.field("to", to); - builder.field("include_lower", includeLower); - builder.field("include_upper", includeUpper); - builder.endObject(); - - if (filterName != null) { - builder.field("_name", filterName); - } - if (cache != null) { - builder.field("_cache", cache); - } - if (cacheKey != null) { - builder.field("_cache_key", cacheKey); - } - - builder.endObject(); - } -} \ No newline at end of file diff --git a/src/main/java/org/elasticsearch/index/query/NumericRangeFilterParser.java b/src/main/java/org/elasticsearch/index/query/NumericRangeFilterParser.java deleted file mode 100644 index 4df72aa1976..00000000000 --- a/src/main/java/org/elasticsearch/index/query/NumericRangeFilterParser.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.index.query; - -import org.apache.lucene.search.Filter; -import org.elasticsearch.common.inject.Inject; -import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.index.cache.filter.support.CacheKeyFilter; -import org.elasticsearch.index.mapper.FieldMapper; -import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.core.NumberFieldMapper; - -import java.io.IOException; - -import static org.elasticsearch.index.query.support.QueryParsers.wrapSmartNameFilter; - -/** - * - */ -@Deprecated -public class NumericRangeFilterParser implements FilterParser { - - public static final String NAME = "numeric_range"; - - @Inject - public NumericRangeFilterParser() { - } - - @Override - public String[] names() { - return new String[]{NAME, "numericRange"}; - } - - @Override - public Filter parse(QueryParseContext parseContext) throws IOException, QueryParsingException { - XContentParser parser = parseContext.parser(); - - boolean cache = false; // default to false, since its using fielddata cache - CacheKeyFilter.Key cacheKey = null; - String fieldName = null; - String from = null; - String to = null; - boolean includeLower = true; - boolean includeUpper = true; - - String filterName = null; - String currentFieldName = null; - XContentParser.Token token; - while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { - if (token == XContentParser.Token.FIELD_NAME) { - currentFieldName = parser.currentName(); - } else if (token == XContentParser.Token.START_OBJECT) { - fieldName = currentFieldName; - while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { - if (token == XContentParser.Token.FIELD_NAME) { - currentFieldName = parser.currentName(); - } else { - if ("from".equals(currentFieldName)) { - from = parser.textOrNull(); - } else if ("to".equals(currentFieldName)) { - to = parser.textOrNull(); - } else if ("include_lower".equals(currentFieldName) || "includeLower".equals(currentFieldName)) { - includeLower = parser.booleanValue(); - } else if ("include_upper".equals(currentFieldName) || "includeUpper".equals(currentFieldName)) { - includeUpper = parser.booleanValue(); - } else if ("gt".equals(currentFieldName)) { - from = parser.textOrNull(); - includeLower = false; - } else if ("gte".equals(currentFieldName) || "ge".equals(currentFieldName)) { - from = parser.textOrNull(); - includeLower = true; - } else if ("lt".equals(currentFieldName)) { - to = parser.textOrNull(); - includeUpper = false; - } else if ("lte".equals(currentFieldName) || "le".equals(currentFieldName)) { - to = parser.textOrNull(); - includeUpper = true; - } else { - throw new QueryParsingException(parseContext.index(), "[numeric_range] filter does not support [" + currentFieldName + "]"); - } - } - } - } else if (token.isValue()) { - if ("_name".equals(currentFieldName)) { - filterName = parser.text(); - } else if ("_cache".equals(currentFieldName)) { - cache = parser.booleanValue(); - } else if ("_cache_key".equals(currentFieldName) || "_cacheKey".equals(currentFieldName)) { - cacheKey = new CacheKeyFilter.Key(parser.text()); - } else { - throw new QueryParsingException(parseContext.index(), "[numeric_range] filter does not support [" + currentFieldName + "]"); - } - } - } - - MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName); - - if (smartNameFieldMappers == null || !smartNameFieldMappers.hasMapper()) { - throw new QueryParsingException(parseContext.index(), "failed to find mapping for field [" + fieldName + "]"); - } - - FieldMapper mapper = smartNameFieldMappers.mapper(); - if (!(mapper instanceof NumberFieldMapper)) { - throw new QueryParsingException(parseContext.index(), "Field [" + fieldName + "] is not a numeric type"); - } - Filter filter = ((NumberFieldMapper) mapper).rangeFilter(parseContext, from, to, includeLower, includeUpper, parseContext); - - if (cache) { - filter = parseContext.cacheFilter(filter, cacheKey); - } - filter = wrapSmartNameFilter(filter, smartNameFieldMappers, parseContext); - if (filterName != null) { - parseContext.addNamedFilter(filterName, filter); - } - return filter; - } -} diff --git a/src/main/java/org/elasticsearch/indices/query/IndicesQueriesModule.java b/src/main/java/org/elasticsearch/indices/query/IndicesQueriesModule.java index 44a9474669a..069dedc7290 100644 --- a/src/main/java/org/elasticsearch/indices/query/IndicesQueriesModule.java +++ b/src/main/java/org/elasticsearch/indices/query/IndicesQueriesModule.java @@ -125,7 +125,6 @@ public class IndicesQueriesModule extends AbstractModule { fpBinders.addBinding().to(TermFilterParser.class).asEagerSingleton(); fpBinders.addBinding().to(TermsFilterParser.class).asEagerSingleton(); fpBinders.addBinding().to(RangeFilterParser.class).asEagerSingleton(); - fpBinders.addBinding().to(NumericRangeFilterParser.class).asEagerSingleton(); fpBinders.addBinding().to(PrefixFilterParser.class).asEagerSingleton(); fpBinders.addBinding().to(RegexpFilterParser.class).asEagerSingleton(); fpBinders.addBinding().to(ScriptFilterParser.class).asEagerSingleton(); @@ -149,4 +148,4 @@ public class IndicesQueriesModule extends AbstractModule { fpBinders.addBinding().to(IndicesFilterParser.class).asEagerSingleton(); fpBinders.addBinding().to(WrapperFilterParser.class).asEagerSingleton(); } -} \ No newline at end of file +} diff --git a/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java b/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java index 6655943b3f3..fa6da71a6db 100644 --- a/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java +++ b/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java @@ -756,21 +756,6 @@ public class SimpleIndexQueryParserTests extends ElasticsearchSingleNodeTest { assertThat(rangeFilter.includesMax(), equalTo(false)); } - @Test - public void testNumericRangeFilteredQueryBuilder() throws IOException { - IndexQueryParserService queryParser = queryParser(); - Query parsedQuery = queryParser.parse(filteredQuery(termQuery("name.first", "shay"), numericRangeFilter("age").from(23).to(54).includeLower(true).includeUpper(false))).query(); - assertThat(parsedQuery, instanceOf(XFilteredQuery.class)); - Filter filter = ((XFilteredQuery) parsedQuery).getFilter(); - assertThat(filter, instanceOf(NumericRangeFieldDataFilter.class)); - NumericRangeFieldDataFilter rangeFilter = (NumericRangeFieldDataFilter) filter; - assertThat(rangeFilter.getField(), equalTo("age")); - assertThat(rangeFilter.getLowerVal().intValue(), equalTo(23)); - assertThat(rangeFilter.getUpperVal().intValue(), equalTo(54)); - assertThat(rangeFilter.isIncludeLower(), equalTo(true)); - assertThat(rangeFilter.isIncludeUpper(), equalTo(false)); - } - @Test public void testRangeFilteredQueryBuilder_executionFieldData() throws IOException { IndexQueryParserService queryParser = queryParser(); @@ -786,22 +771,6 @@ public class SimpleIndexQueryParserTests extends ElasticsearchSingleNodeTest { assertThat(rangeFilter.isIncludeUpper(), equalTo(false)); } - @Test - public void testNumericRangeFilteredQuery() throws IOException { - IndexQueryParserService queryParser = queryParser(); - String query = copyToStringFromClasspath("/org/elasticsearch/index/query/numeric_range-filter.json"); - Query parsedQuery = queryParser.parse(query).query(); - assertThat(parsedQuery, instanceOf(XFilteredQuery.class)); - Filter filter = ((XFilteredQuery) parsedQuery).getFilter(); - assertThat(filter, instanceOf(NumericRangeFieldDataFilter.class)); - NumericRangeFieldDataFilter rangeFilter = (NumericRangeFieldDataFilter) filter; - assertThat(rangeFilter.getField(), equalTo("age")); - assertThat(rangeFilter.getLowerVal().intValue(), equalTo(23)); - assertThat(rangeFilter.getUpperVal().intValue(), equalTo(54)); - assertThat(rangeFilter.isIncludeLower(), equalTo(true)); - assertThat(rangeFilter.isIncludeUpper(), equalTo(false)); - } - @Test public void testBoolFilteredQueryBuilder() throws IOException { IndexQueryParserService queryParser = queryParser(); diff --git a/src/test/java/org/elasticsearch/index/query/numeric_range-filter.json b/src/test/java/org/elasticsearch/index/query/numeric_range-filter.json deleted file mode 100644 index fbae8ae322a..00000000000 --- a/src/test/java/org/elasticsearch/index/query/numeric_range-filter.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "filtered":{ - "query":{ - "term":{ - "name.first":"shay" - } - }, - "filter":{ - "numeric_range":{ - "age":{ - "from":"23", - "to":"54", - "include_lower":true, - "include_upper":false - } - } - } - } -} \ No newline at end of file diff --git a/src/test/java/org/elasticsearch/search/query/SimpleQueryTests.java b/src/test/java/org/elasticsearch/search/query/SimpleQueryTests.java index 91251295e40..2c2670f49d4 100644 --- a/src/test/java/org/elasticsearch/search/query/SimpleQueryTests.java +++ b/src/test/java/org/elasticsearch/search/query/SimpleQueryTests.java @@ -2048,13 +2048,9 @@ public class SimpleQueryTests extends ElasticsearchIntegrationTest { private static FilterBuilder rangeFilter(String field, Object from, Object to) { if (randomBoolean()) { - if (randomBoolean()) { - return FilterBuilders.rangeFilter(field).from(from).to(to); - } else { - return FilterBuilders.rangeFilter(field).from(from).to(to).setExecution("fielddata"); - } + return FilterBuilders.rangeFilter(field).from(from).to(to); } else { - return FilterBuilders.numericRangeFilter(field).from(from).to(to); + return FilterBuilders.rangeFilter(field).from(from).to(to).setExecution("fielddata"); } }