optimize a filtered query with match_all query into a constant score that just wraps the filter

This commit is contained in:
kimchy 2011-01-11 19:17:17 +02:00
parent 6130ac2ee7
commit 93dec72e43
4 changed files with 107 additions and 87 deletions

View File

@ -87,4 +87,17 @@ public class Queries {
} }
return q; return q;
} }
public static boolean isMatchAllQuery(Query query) {
if (query instanceof MatchAllDocsQuery) {
return true;
}
if (query instanceof DeletionAwareConstantScoreQuery) {
DeletionAwareConstantScoreQuery scoreQuery = (DeletionAwareConstantScoreQuery) query;
if (scoreQuery.getFilter() instanceof MatchAllDocsFilter) {
return true;
}
}
return false;
}
} }

View File

@ -19,10 +19,12 @@
package org.elasticsearch.index.query.xcontent; package org.elasticsearch.index.query.xcontent;
import org.apache.lucene.search.DeletionAwareConstantScoreQuery;
import org.apache.lucene.search.Filter; import org.apache.lucene.search.Filter;
import org.apache.lucene.search.FilteredQuery; import org.apache.lucene.search.FilteredQuery;
import org.apache.lucene.search.Query; import org.apache.lucene.search.Query;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.lucene.search.Queries;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.index.AbstractIndexComponent; import org.elasticsearch.index.AbstractIndexComponent;
@ -86,6 +88,13 @@ public class FilteredQueryParser extends AbstractIndexComponent implements XCont
filter = parseContext.cacheFilter(filter); filter = parseContext.cacheFilter(filter);
} }
// if its a match_all query, use constant_score
if (Queries.isMatchAllQuery(query)) {
Query q = new DeletionAwareConstantScoreQuery(filter);
q.setBoost(boost);
return q;
}
// TODO // TODO
// With the way filtered queries work today, both query and filter advance (one at a time) // With the way filtered queries work today, both query and filter advance (one at a time)
// to get hits. Since all filters support random access, it might make sense to use that. // to get hits. Since all filters support random access, it might make sense to use that.
@ -96,6 +105,7 @@ public class FilteredQueryParser extends AbstractIndexComponent implements XCont
// - https://issues.apache.org/jira/browse/LUCENE-1536 // - https://issues.apache.org/jira/browse/LUCENE-1536
// - http://chbits.blogspot.com/2010/09/fast-search-filters-using-flex.html // - http://chbits.blogspot.com/2010/09/fast-search-filters-using-flex.html
FilteredQuery filteredQuery = new FilteredQuery(query, filter); FilteredQuery filteredQuery = new FilteredQuery(query, filter);
filteredQuery.setBoost(boost); filteredQuery.setBoost(boost);
return filteredQuery; return filteredQuery;

View File

@ -20,10 +20,13 @@
package org.elasticsearch.search.facet.query; package org.elasticsearch.search.facet.query;
import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.*; import org.apache.lucene.search.Filter;
import org.apache.lucene.search.FilteredQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.QueryWrapperFilter;
import org.elasticsearch.common.lucene.docset.DocSet; import org.elasticsearch.common.lucene.docset.DocSet;
import org.elasticsearch.common.lucene.docset.DocSets; import org.elasticsearch.common.lucene.docset.DocSets;
import org.elasticsearch.common.lucene.search.MatchAllDocsFilter; import org.elasticsearch.common.lucene.search.Queries;
import org.elasticsearch.index.cache.filter.FilterCache; import org.elasticsearch.index.cache.filter.FilterCache;
import org.elasticsearch.search.facet.AbstractFacetCollector; import org.elasticsearch.search.facet.AbstractFacetCollector;
import org.elasticsearch.search.facet.Facet; import org.elasticsearch.search.facet.Facet;
@ -71,15 +74,9 @@ public class QueryFacetCollector extends AbstractFacetCollector {
private Filter extractFilterIfApplicable(Query query) { private Filter extractFilterIfApplicable(Query query) {
if (query instanceof FilteredQuery) { if (query instanceof FilteredQuery) {
FilteredQuery fQuery = (FilteredQuery) query; FilteredQuery fQuery = (FilteredQuery) query;
if (fQuery.getQuery() instanceof MatchAllDocsQuery) { if (Queries.isMatchAllQuery(fQuery.getQuery())) {
return fQuery.getFilter(); return fQuery.getFilter();
} }
if (fQuery.getQuery() instanceof DeletionAwareConstantScoreQuery) {
DeletionAwareConstantScoreQuery scoreQuery = (DeletionAwareConstantScoreQuery) fQuery.getQuery();
if (scoreQuery.getFilter() instanceof MatchAllDocsFilter) {
return fQuery.getFilter();
}
}
} }
return null; return null;
} }

View File

@ -603,10 +603,10 @@ public class SimpleIndexQueryParserTests {
@Test public void testAndFilteredQueryBuilder() throws IOException { @Test public void testAndFilteredQueryBuilder() throws IOException {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
Query parsedQuery = queryParser.parse(filteredQuery(matchAllQuery(), andFilter(termFilter("name.first", "shay1"), termFilter("name.first", "shay4")))).query(); Query parsedQuery = queryParser.parse(filteredQuery(matchAllQuery(), andFilter(termFilter("name.first", "shay1"), termFilter("name.first", "shay4")))).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
AndFilter andFilter = (AndFilter) filteredQuery.getFilter(); AndFilter andFilter = (AndFilter) constantScoreQuery.getFilter();
assertThat(andFilter.filters().size(), equalTo(2)); assertThat(andFilter.filters().size(), equalTo(2));
assertThat(((TermFilter) andFilter.filters().get(0)).getTerm(), equalTo(new Term("name.first", "shay1"))); assertThat(((TermFilter) andFilter.filters().get(0)).getTerm(), equalTo(new Term("name.first", "shay1")));
assertThat(((TermFilter) andFilter.filters().get(1)).getTerm(), equalTo(new Term("name.first", "shay4"))); assertThat(((TermFilter) andFilter.filters().get(1)).getTerm(), equalTo(new Term("name.first", "shay4")));
@ -655,10 +655,10 @@ public class SimpleIndexQueryParserTests {
@Test public void testOrFilteredQueryBuilder() throws IOException { @Test public void testOrFilteredQueryBuilder() throws IOException {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
Query parsedQuery = queryParser.parse(filteredQuery(matchAllQuery(), orFilter(termFilter("name.first", "shay1"), termFilter("name.first", "shay4")))).query(); Query parsedQuery = queryParser.parse(filteredQuery(matchAllQuery(), orFilter(termFilter("name.first", "shay1"), termFilter("name.first", "shay4")))).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
OrFilter andFilter = (OrFilter) filteredQuery.getFilter(); OrFilter andFilter = (OrFilter) constantScoreQuery.getFilter();
assertThat(andFilter.filters().size(), equalTo(2)); assertThat(andFilter.filters().size(), equalTo(2));
assertThat(((TermFilter) andFilter.filters().get(0)).getTerm(), equalTo(new Term("name.first", "shay1"))); assertThat(((TermFilter) andFilter.filters().get(0)).getTerm(), equalTo(new Term("name.first", "shay1")));
assertThat(((TermFilter) andFilter.filters().get(1)).getTerm(), equalTo(new Term("name.first", "shay4"))); assertThat(((TermFilter) andFilter.filters().get(1)).getTerm(), equalTo(new Term("name.first", "shay4")));
@ -693,10 +693,10 @@ public class SimpleIndexQueryParserTests {
@Test public void testNotFilteredQueryBuilder() throws IOException { @Test public void testNotFilteredQueryBuilder() throws IOException {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
Query parsedQuery = queryParser.parse(filteredQuery(matchAllQuery(), notFilter(termFilter("name.first", "shay1")))).query(); Query parsedQuery = queryParser.parse(filteredQuery(matchAllQuery(), notFilter(termFilter("name.first", "shay1")))).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
NotFilter notFilter = (NotFilter) filteredQuery.getFilter(); NotFilter notFilter = (NotFilter) constantScoreQuery.getFilter();
assertThat(((TermFilter) notFilter.filter()).getTerm(), equalTo(new Term("name.first", "shay1"))); assertThat(((TermFilter) notFilter.filter()).getTerm(), equalTo(new Term("name.first", "shay1")));
} }
@ -1175,9 +1175,9 @@ public class SimpleIndexQueryParserTests {
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance-named.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance-named.json");
ParsedQuery parsedQuery = queryParser.parse(query); ParsedQuery parsedQuery = queryParser.parse(query);
assertThat(parsedQuery.namedFilters().containsKey("test"), equalTo(true)); assertThat(parsedQuery.namedFilters().containsKey("test"), equalTo(true));
assertThat(parsedQuery.query(), instanceOf(FilteredQuery.class)); assertThat(parsedQuery.query(), instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery.query(); DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery.query();
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1188,9 +1188,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance1.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance1.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1201,9 +1201,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance2.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance2.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1214,9 +1214,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance3.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance3.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1227,9 +1227,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance4.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance4.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1240,9 +1240,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance5.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance5.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1253,9 +1253,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance6.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance6.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1266,9 +1266,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance7.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance7.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1279,9 +1279,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance8.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance8.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1292,9 +1292,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance9.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance9.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1305,9 +1305,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance10.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance10.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1318,9 +1318,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance11.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance11.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1331,9 +1331,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance12.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_distance12.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoDistanceFilter filter = (GeoDistanceFilter) filteredQuery.getFilter(); GeoDistanceFilter filter = (GeoDistanceFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.lat(), closeTo(40, 0.00001)); assertThat(filter.lat(), closeTo(40, 0.00001));
assertThat(filter.lon(), closeTo(-70, 0.00001)); assertThat(filter.lon(), closeTo(-70, 0.00001));
@ -1344,10 +1344,10 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox-named.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox-named.json");
ParsedQuery parsedQuery = queryParser.parse(query); ParsedQuery parsedQuery = queryParser.parse(query);
assertThat(parsedQuery.query(), instanceOf(FilteredQuery.class)); assertThat(parsedQuery.query(), instanceOf(DeletionAwareConstantScoreQuery.class));
assertThat(parsedQuery.namedFilters().containsKey("test"), equalTo(true)); assertThat(parsedQuery.namedFilters().containsKey("test"), equalTo(true));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery.query(); DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery.query();
GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) filteredQuery.getFilter(); GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.topLeft().lat, closeTo(40, 0.00001)); assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
assertThat(filter.topLeft().lon, closeTo(-70, 0.00001)); assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
@ -1360,9 +1360,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox1.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox1.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) filteredQuery.getFilter(); GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.topLeft().lat, closeTo(40, 0.00001)); assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
assertThat(filter.topLeft().lon, closeTo(-70, 0.00001)); assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
@ -1374,9 +1374,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox2.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox2.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) filteredQuery.getFilter(); GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.topLeft().lat, closeTo(40, 0.00001)); assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
assertThat(filter.topLeft().lon, closeTo(-70, 0.00001)); assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
@ -1388,9 +1388,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox3.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox3.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) filteredQuery.getFilter(); GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.topLeft().lat, closeTo(40, 0.00001)); assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
assertThat(filter.topLeft().lon, closeTo(-70, 0.00001)); assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
@ -1402,9 +1402,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox4.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_boundingbox4.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) filteredQuery.getFilter(); GeoBoundingBoxFilter filter = (GeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.topLeft().lat, closeTo(40, 0.00001)); assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
assertThat(filter.topLeft().lon, closeTo(-70, 0.00001)); assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
@ -1417,9 +1417,9 @@ public class SimpleIndexQueryParserTests {
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon-named.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon-named.json");
ParsedQuery parsedQuery = queryParser.parse(query); ParsedQuery parsedQuery = queryParser.parse(query);
assertThat(parsedQuery.namedFilters().containsKey("test"), equalTo(true)); assertThat(parsedQuery.namedFilters().containsKey("test"), equalTo(true));
assertThat(parsedQuery.query(), instanceOf(FilteredQuery.class)); assertThat(parsedQuery.query(), instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery.query(); DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery.query();
GeoPolygonFilter filter = (GeoPolygonFilter) filteredQuery.getFilter(); GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3)); assertThat(filter.points().length, equalTo(3));
assertThat(filter.points()[0].lat, closeTo(40, 0.00001)); assertThat(filter.points()[0].lat, closeTo(40, 0.00001));
@ -1434,9 +1434,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon1.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon1.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoPolygonFilter filter = (GeoPolygonFilter) filteredQuery.getFilter(); GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3)); assertThat(filter.points().length, equalTo(3));
assertThat(filter.points()[0].lat, closeTo(40, 0.00001)); assertThat(filter.points()[0].lat, closeTo(40, 0.00001));
@ -1451,9 +1451,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon2.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon2.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoPolygonFilter filter = (GeoPolygonFilter) filteredQuery.getFilter(); GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3)); assertThat(filter.points().length, equalTo(3));
assertThat(filter.points()[0].lat, closeTo(40, 0.00001)); assertThat(filter.points()[0].lat, closeTo(40, 0.00001));
@ -1468,9 +1468,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon3.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon3.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoPolygonFilter filter = (GeoPolygonFilter) filteredQuery.getFilter(); GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3)); assertThat(filter.points().length, equalTo(3));
assertThat(filter.points()[0].lat, closeTo(40, 0.00001)); assertThat(filter.points()[0].lat, closeTo(40, 0.00001));
@ -1485,9 +1485,9 @@ public class SimpleIndexQueryParserTests {
IndexQueryParser queryParser = queryParser(); IndexQueryParser queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon4.json"); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/geo_polygon4.json");
Query parsedQuery = queryParser.parse(query).query(); Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(FilteredQuery.class)); assertThat(parsedQuery, instanceOf(DeletionAwareConstantScoreQuery.class));
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery; DeletionAwareConstantScoreQuery constantScoreQuery = (DeletionAwareConstantScoreQuery) parsedQuery;
GeoPolygonFilter filter = (GeoPolygonFilter) filteredQuery.getFilter(); GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location")); assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3)); assertThat(filter.points().length, equalTo(3));
assertThat(filter.points()[0].lat, closeTo(40, 0.00001)); assertThat(filter.points()[0].lat, closeTo(40, 0.00001));