|
28 | 28 | import org.apache.lucene.index.IndexWriterConfig; |
29 | 29 | import org.apache.lucene.index.Term; |
30 | 30 | import org.apache.lucene.search.IndexSearcher; |
| 31 | +import org.apache.lucene.search.MatchAllDocsQuery; |
31 | 32 | import org.apache.lucene.search.TermQuery; |
32 | 33 | import org.apache.lucene.store.Directory; |
33 | 34 | import org.elasticsearch.index.mapper.MappedFieldType; |
34 | 35 | import org.elasticsearch.index.mapper.NumberFieldMapper; |
35 | 36 | import org.elasticsearch.index.mapper.TextFieldMapper; |
36 | 37 | import org.elasticsearch.index.mapper.TextFieldMapper.TextFieldType; |
| 38 | +import org.elasticsearch.index.query.MatchAllQueryBuilder; |
| 39 | +import org.elasticsearch.index.query.MatchNoneQueryBuilder; |
| 40 | +import org.elasticsearch.index.query.QueryBuilder; |
37 | 41 | import org.elasticsearch.search.aggregations.AggregatorTestCase; |
| 42 | +import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder; |
| 43 | +import org.elasticsearch.search.aggregations.bucket.filter.InternalFilters; |
| 44 | +import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; |
38 | 45 | import org.elasticsearch.search.aggregations.metrics.Min; |
39 | 46 | import org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder; |
40 | 47 | import org.elasticsearch.search.aggregations.support.AggregationInspectionHelper; |
@@ -117,4 +124,36 @@ public void testRidiculousSize() throws IOException { |
117 | 124 | } |
118 | 125 | } |
119 | 126 | } |
| 127 | + |
| 128 | + /** |
| 129 | + * Tests that the sampler aggregation works correctly if the parent bucket does not contain any hit. |
| 130 | + */ |
| 131 | + public void testEmptyParentBucket() throws Exception { |
| 132 | + IndexWriterConfig indexWriterConfig = newIndexWriterConfig(); |
| 133 | + try (Directory dir = newDirectory(); |
| 134 | + IndexWriter writer = new IndexWriter(dir, indexWriterConfig)) { |
| 135 | + |
| 136 | + writer.addDocument(new Document()); |
| 137 | + |
| 138 | + try (IndexReader reader = DirectoryReader.open(writer)) { |
| 139 | + IndexSearcher searcher = new IndexSearcher(reader); |
| 140 | + |
| 141 | + QueryBuilder[] filters = new QueryBuilder[]{ |
| 142 | + new MatchAllQueryBuilder(), |
| 143 | + new MatchNoneQueryBuilder() |
| 144 | + }; |
| 145 | + FiltersAggregationBuilder samplerParent = new FiltersAggregationBuilder("filters", filters); |
| 146 | + TermsAggregationBuilder samplerChild = new TermsAggregationBuilder("child").field("field"); |
| 147 | + SamplerAggregationBuilder sampler = new SamplerAggregationBuilder("sampler") |
| 148 | + .subAggregation(samplerChild); |
| 149 | + samplerParent.subAggregation(sampler); |
| 150 | + |
| 151 | + InternalFilters response = searchAndReduce(searcher, new MatchAllDocsQuery(), samplerParent); |
| 152 | + assertEquals(response.getBuckets().size(), 2); |
| 153 | + assertEquals(response.getBuckets().get(0).getDocCount(), 1); |
| 154 | + assertEquals(response.getBuckets().get(1).getDocCount(), 0); |
| 155 | + } |
| 156 | + } |
| 157 | + } |
| 158 | + |
120 | 159 | } |
0 commit comments