summaryrefslogtreecommitdiff
path: root/core/src/test/java/org/elasticsearch/search/aggregations/bucket
diff options
context:
space:
mode:
authorAdrien Grand <jpountz@gmail.com>2017-04-05 16:46:21 +0200
committerGitHub <noreply@github.com>2017-04-05 16:46:21 +0200
commitd5d0f140d6a362a3b069dd55597506f91c97805e (patch)
tree56ce0345f7d451e1f6643e816ffc51aa34025109 /core/src/test/java/org/elasticsearch/search/aggregations/bucket
parentadccdbb3cf60145935d4bc1625005a53fbcf2dea (diff)
The `filter` and `significant_terms` aggregations should parse the `filter` as a filter, not as a query. (#23797)
This is important for some queries like `bool`, which are parsed differently depending on whether we want to get a query or a filter.
Diffstat (limited to 'core/src/test/java/org/elasticsearch/search/aggregations/bucket')
-rw-r--r--core/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregatorTests.java (renamed from core/src/test/java/org/elasticsearch/search/aggregations/bucket/FilterAggregatorTests.java)28
-rw-r--r--core/src/test/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregatorTests.java (renamed from core/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersAggregatorTests.java)27
-rw-r--r--core/src/test/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorTests.java75
3 files changed, 128 insertions, 2 deletions
diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/FilterAggregatorTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregatorTests.java
index 54fd71d3e0..fb615e66df 100644
--- a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/FilterAggregatorTests.java
+++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregatorTests.java
@@ -16,26 +16,34 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.elasticsearch.search.aggregations.bucket;
+package org.elasticsearch.search.aggregations.bucket.filter;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexOptions;
import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.MultiReader;
import org.apache.lucene.index.RandomIndexWriter;
+import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
+import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
import org.elasticsearch.index.mapper.KeywordFieldMapper;
import org.elasticsearch.index.mapper.MappedFieldType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.aggregations.AggregatorFactory;
import org.elasticsearch.search.aggregations.AggregatorTestCase;
import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
+import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregatorFactory;
import org.elasticsearch.search.aggregations.bucket.filter.InternalFilter;
+import org.hamcrest.Matchers;
import org.junit.Before;
+import java.io.IOException;
+
public class FilterAggregatorTests extends AggregatorTestCase {
private MappedFieldType fieldType;
@@ -102,4 +110,22 @@ public class FilterAggregatorTests extends AggregatorTestCase {
indexReader.close();
directory.close();
}
+
+ public void testParsedAsFilter() throws IOException {
+ IndexReader indexReader = new MultiReader();
+ IndexSearcher indexSearcher = newSearcher(indexReader);
+ QueryBuilder filter = QueryBuilders.boolQuery()
+ .must(QueryBuilders.termQuery("field", "foo"))
+ .should(QueryBuilders.termQuery("field", "bar"));
+ FilterAggregationBuilder builder = new FilterAggregationBuilder("test", filter);
+ AggregatorFactory<?> factory = createAggregatorFactory(builder, indexSearcher, fieldType);
+ assertThat(factory, Matchers.instanceOf(FilterAggregatorFactory.class));
+ FilterAggregatorFactory filterFactory = (FilterAggregatorFactory) factory;
+ Query parsedQuery = filterFactory.weight.getQuery();
+ assertThat(parsedQuery, Matchers.instanceOf(BooleanQuery.class));
+ assertEquals(2, ((BooleanQuery) parsedQuery).clauses().size());
+ // means the bool query has been parsed as a filter, if it was a query minShouldMatch would
+ // be 0
+ assertEquals(1, ((BooleanQuery) parsedQuery).getMinimumNumberShouldMatch());
+ }
}
diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersAggregatorTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregatorTests.java
index 7ade659a12..4597eabb77 100644
--- a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersAggregatorTests.java
+++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregatorTests.java
@@ -16,27 +16,34 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.elasticsearch.search.aggregations.bucket;
+package org.elasticsearch.search.aggregations.bucket.filters;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexOptions;
import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.MultiReader;
import org.apache.lucene.index.RandomIndexWriter;
+import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
+import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
import org.elasticsearch.index.mapper.KeywordFieldMapper;
import org.elasticsearch.index.mapper.MappedFieldType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.aggregations.AggregatorFactory;
import org.elasticsearch.search.aggregations.AggregatorTestCase;
import org.elasticsearch.search.aggregations.bucket.filters.FiltersAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.filters.FiltersAggregator;
+import org.elasticsearch.search.aggregations.bucket.filters.FiltersAggregatorFactory;
import org.elasticsearch.search.aggregations.bucket.filters.InternalFilters;
+import org.hamcrest.Matchers;
import org.junit.Before;
+import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -200,4 +207,22 @@ public class FiltersAggregatorTests extends AggregatorTestCase {
indexReader.close();
directory.close();
}
+
+ public void testParsedAsFilter() throws IOException {
+ IndexReader indexReader = new MultiReader();
+ IndexSearcher indexSearcher = newSearcher(indexReader);
+ QueryBuilder filter = QueryBuilders.boolQuery()
+ .must(QueryBuilders.termQuery("field", "foo"))
+ .should(QueryBuilders.termQuery("field", "bar"));
+ FiltersAggregationBuilder builder = new FiltersAggregationBuilder("test", filter);
+ AggregatorFactory<?> factory = createAggregatorFactory(builder, indexSearcher, fieldType);
+ assertThat(factory, Matchers.instanceOf(FiltersAggregatorFactory.class));
+ FiltersAggregatorFactory filtersFactory = (FiltersAggregatorFactory) factory;
+ Query parsedQuery = filtersFactory.weights[0].getQuery();
+ assertThat(parsedQuery, Matchers.instanceOf(BooleanQuery.class));
+ assertEquals(2, ((BooleanQuery) parsedQuery).clauses().size());
+ // means the bool query has been parsed as a filter, if it was a query minShouldMatch would
+ // be 0
+ assertEquals(1, ((BooleanQuery) parsedQuery).getMinimumNumberShouldMatch());
+ }
}
diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorTests.java
new file mode 100644
index 0000000000..e2625039df
--- /dev/null
+++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorTests.java
@@ -0,0 +1,75 @@
+/*
+ * 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.search.aggregations.bucket.significant;
+
+import org.apache.lucene.index.IndexOptions;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.MultiReader;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.elasticsearch.index.mapper.KeywordFieldMapper;
+import org.elasticsearch.index.mapper.MappedFieldType;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.aggregations.AggregatorFactory;
+import org.elasticsearch.search.aggregations.AggregatorTestCase;
+import org.elasticsearch.search.aggregations.support.ValueType;
+import org.hamcrest.Matchers;
+import org.junit.Before;
+
+import java.io.IOException;
+
+public class SignificantTermsAggregatorTests extends AggregatorTestCase {
+
+ private MappedFieldType fieldType;
+
+ @Before
+ public void setUpTest() throws Exception {
+ super.setUp();
+ fieldType = new KeywordFieldMapper.KeywordFieldType();
+ fieldType.setHasDocValues(true);
+ fieldType.setIndexOptions(IndexOptions.DOCS);
+ fieldType.setName("field");
+ }
+
+ public void testParsedAsFilter() throws IOException {
+ IndexReader indexReader = new MultiReader();
+ IndexSearcher indexSearcher = newSearcher(indexReader);
+ QueryBuilder filter = QueryBuilders.boolQuery()
+ .must(QueryBuilders.termQuery("field", "foo"))
+ .should(QueryBuilders.termQuery("field", "bar"));
+ SignificantTermsAggregationBuilder builder = new SignificantTermsAggregationBuilder(
+ "test", ValueType.STRING)
+ .field("field")
+ .backgroundFilter(filter);
+ AggregatorFactory<?> factory = createAggregatorFactory(builder, indexSearcher, fieldType);
+ assertThat(factory, Matchers.instanceOf(SignificantTermsAggregatorFactory.class));
+ SignificantTermsAggregatorFactory sigTermsFactory =
+ (SignificantTermsAggregatorFactory) factory;
+ Query parsedQuery = sigTermsFactory.filter;
+ assertThat(parsedQuery, Matchers.instanceOf(BooleanQuery.class));
+ assertEquals(2, ((BooleanQuery) parsedQuery).clauses().size());
+ // means the bool query has been parsed as a filter, if it was a query minShouldMatch would
+ // be 0
+ assertEquals(1, ((BooleanQuery) parsedQuery).getMinimumNumberShouldMatch());
+ }
+
+}