@@ -107,24 +107,14 @@ public void testSignificance() throws IOException {
107107 // single segment with
108108 // predictable docIds
109109 try (Directory dir = newDirectory (); IndexWriter w = new IndexWriter (dir , indexWriterConfig )) {
110- for (int i = 0 ; i < 10 ; i ++) {
111- Document doc = new Document ();
112- StringBuilder text = new StringBuilder ("common " );
113- if (i % 2 == 0 ) {
114- text .append ("odd " );
115- } else {
116- text .append ("even " );
117- }
118-
119- doc .add (new Field ("text" , text .toString (), textFieldType ));
120- String json = "{ \" text\" : \" " + text .toString () + "\" }" ;
121- doc .add (new StoredField ("_source" , new BytesRef (json )));
122-
123- w .addDocument (doc );
124- }
110+ addMixedTextDocs (textFieldType , w );
125111
126112 SignificantTermsAggregationBuilder sigAgg = new SignificantTermsAggregationBuilder ("sig_text" , null ).field ("text" );
127113 sigAgg .executionHint (randomExecutionHint ());
114+ if (randomBoolean ()) {
115+ // Use a background filter which just happens to be same scope as whole-index.
116+ sigAgg .backgroundFilter (QueryBuilders .termsQuery ("text" , "common" ));
117+ }
128118
129119 SignificantTermsAggregationBuilder sigNumAgg = new SignificantTermsAggregationBuilder ("sig_number" , null ).field ("long_field" );
130120 sigNumAgg .executionHint (randomExecutionHint ());
@@ -159,6 +149,7 @@ public void testSignificance() throws IOException {
159149 String evenStrings [] = new String [] {"even" , "regular" };
160150
161151 sigAgg .includeExclude (new IncludeExclude (oddStrings , evenStrings ));
152+ sigAgg .significanceHeuristic (SignificanceHeuristicTests .getRandomSignificanceheuristic ());
162153 terms = searchAndReduce (searcher , new TermQuery (new Term ("text" , "odd" )), sigAgg , textFieldType );
163154 assertNotNull (terms .getBucketByKey ("odd" ));
164155 assertNull (terms .getBucketByKey ("weird" ));
@@ -237,6 +228,60 @@ public void testNumericSignificance() throws IOException {
237228 }
238229 }
239230 }
231+
232+ /**
233+ * Uses the significant terms aggregation on an index with unmapped field
234+ */
235+ public void testUnmapped () throws IOException {
236+ TextFieldType textFieldType = new TextFieldType ();
237+ textFieldType .setName ("text" );
238+ textFieldType .setFielddata (true );
239+ textFieldType .setIndexAnalyzer (new NamedAnalyzer ("my_analyzer" , AnalyzerScope .GLOBAL , new StandardAnalyzer ()));
240+
241+ IndexWriterConfig indexWriterConfig = newIndexWriterConfig ();
242+ indexWriterConfig .setMaxBufferedDocs (100 );
243+ indexWriterConfig .setRAMBufferSizeMB (100 ); // flush on open to have a
244+ // single segment with
245+ // predictable docIds
246+ try (Directory dir = newDirectory (); IndexWriter w = new IndexWriter (dir , indexWriterConfig )) {
247+ addMixedTextDocs (textFieldType , w );
248+
249+ // Attempt aggregation on unmapped field
250+ SignificantTermsAggregationBuilder sigAgg = new SignificantTermsAggregationBuilder ("sig_text" , null ).field ("unmapped_field" );
251+ sigAgg .executionHint (randomExecutionHint ());
252+
253+ try (IndexReader reader = DirectoryReader .open (w )) {
254+ assertEquals ("test expects a single segment" , 1 , reader .leaves ().size ());
255+ IndexSearcher searcher = new IndexSearcher (reader );
256+
257+ // Search "odd"
258+ SignificantTerms terms = searchAndReduce (searcher , new TermQuery (new Term ("text" , "odd" )), sigAgg , textFieldType );
259+
260+ assertNull (terms .getBucketByKey ("even" ));
261+ assertNull (terms .getBucketByKey ("common" ));
262+ assertNull (terms .getBucketByKey ("odd" ));
263+
264+ }
265+ }
266+ }
267+
268+ private void addMixedTextDocs (TextFieldType textFieldType , IndexWriter w ) throws IOException {
269+ for (int i = 0 ; i < 10 ; i ++) {
270+ Document doc = new Document ();
271+ StringBuilder text = new StringBuilder ("common " );
272+ if (i % 2 == 0 ) {
273+ text .append ("odd " );
274+ } else {
275+ text .append ("even " );
276+ }
277+
278+ doc .add (new Field ("text" , text .toString (), textFieldType ));
279+ String json = "{ \" text\" : \" " + text .toString () + "\" }" ;
280+ doc .add (new StoredField ("_source" , new BytesRef (json )));
281+
282+ w .addDocument (doc );
283+ }
284+ }
240285
241286 private void addFields (Document doc , List <Field > createFields ) {
242287 for (Field field : createFields ) {
0 commit comments