@@ -97,114 +97,53 @@ public void setupSuiteScopeCluster() throws Exception {
9797 ensureSearchable ();
9898 }
9999
100- // This test replicates a strange filter query & filters aggregation behavior
101- // we apparently utilize competitive iterators strangely.
102- // See: https://github.com/elastic/elasticsearch/issues/126955
103100 public void testSimpleWithFilterQuery () throws Exception {
104101 createIndex ("filters_idx" );
105- String groupFieldName = "group " ;
106- String subGroupFieldName = "subGroup " ;
102+ String fieldAName = "fieldA " ;
103+ String fieldBName = "fieldB " ;
107104
108- int numTotalGroup0 = 500 ;
109- String group0Name = "group0" ;
105+ int totalItems = 1024 ;
110106
111- int numTotalGroup1 = 1000 ;
112- String group1Name = "group1" ;
113-
114- int subGroup0 = 100 ;
115- String subGroup0Name = "subGroup0" ;
116-
117- int subGroup1 = 50 ;
118- String subGroup1Name = "subGroup1" ;
119-
120- int subGroup2 = 25 ;
121- String subGroup2Name = "subGroup2" ;
122- int others = 10 ;
123- String otherName = "others" ;
124107 List <IndexRequestBuilder > builders = new ArrayList <>();
125- for (int i = 0 ; i < numTotalGroup0 ; i ++) {
126- for (int j = 0 ; j < subGroup0 ; j ++) {
127- XContentBuilder source = jsonBuilder ().startObject ()
128- .field (groupFieldName , group0Name )
129- .field (subGroupFieldName , subGroup0Name )
130- .endObject ();
131- builders .add (prepareIndex ("filters_idx" ).setSource (source ));
132- }
133- for (int j = 0 ; j < subGroup1 ; j ++) {
134- XContentBuilder source = jsonBuilder ().startObject ()
135- .field (groupFieldName , group0Name )
136- .field (subGroupFieldName , subGroup1Name )
137- .endObject ();
138- builders .add (prepareIndex ("filters_idx" ).setSource (source ));
139- }
140- for (int j = 0 ; j < subGroup2 ; j ++) {
141- XContentBuilder source = jsonBuilder ().startObject ()
142- .field (groupFieldName , group0Name )
143- .field (subGroupFieldName , subGroup2Name )
144- .endObject ();
145- builders .add (prepareIndex ("filters_idx" ).setSource (source ));
146- }
147- for (int j = 0 ; j < others ; j ++) {
148- XContentBuilder source = jsonBuilder ().startObject ()
149- .field (groupFieldName , group0Name )
150- .field (subGroupFieldName , otherName )
151- .endObject ();
152- builders .add (prepareIndex ("filters_idx" ).setSource (source ));
153- }
108+ for (int i = 0 ; i < totalItems ; i ++) {
109+ XContentBuilder source = jsonBuilder ().startObject ().field (fieldAName , "0" ).field (fieldBName , "" + i % 2 ).endObject ();
110+ builders .add (prepareIndex ("filters_idx" ).setId ("" + i ).setSource (source ));
154111 }
155- for (int i = 0 ; i < numTotalGroup1 ; i ++) {
156- for (int j = 0 ; j < subGroup0 ; j ++) {
157- XContentBuilder source = jsonBuilder ().startObject ()
158- .field (groupFieldName , group1Name )
159- .field (subGroupFieldName , subGroup0Name )
160- .endObject ();
161- builders .add (prepareIndex ("filters_idx" ).setSource (source ));
162- }
163- for (int j = 0 ; j < subGroup1 ; j ++) {
164- XContentBuilder source = jsonBuilder ().startObject ()
165- .field (groupFieldName , group1Name )
166- .field (subGroupFieldName , subGroup1Name )
167- .endObject ();
168- builders .add (prepareIndex ("filters_idx" ).setSource (source ));
169- }
170- for (int j = 0 ; j < subGroup2 ; j ++) {
171- XContentBuilder source = jsonBuilder ().startObject ()
172- .field (groupFieldName , group1Name )
173- .field (subGroupFieldName , subGroup2Name )
174- .endObject ();
175- builders .add (prepareIndex ("filters_idx" ).setSource (source ));
176- }
177- for (int j = 0 ; j < others ; j ++) {
178- XContentBuilder source = jsonBuilder ().startObject ()
179- .field (groupFieldName , group1Name )
180- .field (subGroupFieldName , otherName )
181- .endObject ();
182- builders .add (prepareIndex ("filters_idx" ).setSource (source ));
183- }
184- }
185- indexRandom (true , false , true , builders );
112+ indexRandom (true , builders );
186113 ensureSearchable ();
187114 assertNoFailuresAndResponse (
188115 prepareSearch ("filters_idx" ).setSize (0 )
189116 .setRequestCache (false )
190117 .setTrackTotalHits (true )
191- .setQuery (boolQuery ().filter (termQuery ( groupFieldName + ".keyword" , group0Name )))
118+ .setQuery (boolQuery ().filter (termsQuery ( fieldAName + ".keyword" , "0" )))
192119 .addAggregation (
193120 filters (
194121 "results" ,
195- new KeyedFilter (subGroup0Name , termsQuery (subGroupFieldName + ".keyword" , subGroup0Name )),
196- new KeyedFilter (subGroup1Name , termsQuery (subGroupFieldName + ".keyword" , subGroup1Name )),
197- new KeyedFilter (subGroup2Name , termsQuery (subGroupFieldName + ".keyword" , subGroup2Name ))
198- // This is key
122+ new KeyedFilter ("zero" , termQuery (fieldBName + ".keyword" , "0" )),
123+ new KeyedFilter ("one" , termQuery (fieldBName + ".keyword" , "1" ))
199124 ).otherBucket (false )
200125 ),
201126 searchResponse -> {
202127 Filters filters = searchResponse .getAggregations ().get ("results" );
203128 assertThat (filters , notNullValue ());
204129 assertThat (filters .getName (), equalTo ("results" ));
205- Filters .Bucket bucket = filters .getBucketByKey (subGroup0Name );
206- assertThat (bucket , Matchers .notNullValue ());
207- assertThat (bucket .getDocCount (), equalTo ((long ) subGroup0 * numTotalGroup0 ));
130+ assertThat (filters .getBuckets ().size (), equalTo (2 ));
131+ assertThat (filters .getBucketByKey ("zero" ).getDocCount (), equalTo (512L ));
132+ assertThat (filters .getBucketByKey ("one" ).getDocCount (), equalTo (512L ));
133+ }
134+ );
135+ assertNoFailuresAndResponse (
136+ prepareSearch ("filters_idx" ).setSize (0 )
137+ .setRequestCache (false )
138+ .setTrackTotalHits (true )
139+ .setQuery (boolQuery ().filter (termsQuery (fieldAName + ".keyword" , "0" )))
140+ .addAggregation (filters ("results" , new KeyedFilter ("one" , termQuery (fieldBName + ".keyword" , "1" ))).otherBucket (false )),
141+ searchResponse -> {
142+ Filters filters = searchResponse .getAggregations ().get ("results" );
143+ assertThat (filters , notNullValue ());
144+ assertThat (filters .getName (), equalTo ("results" ));
145+ assertThat (filters .getBuckets ().size (), equalTo (1 ));
146+ assertThat (filters .getBucketByKey ("one" ).getDocCount (), equalTo (512L ));
208147 }
209148 );
210149 }
0 commit comments