Skip to content

Commit e0db9ec

Browse files
committed
Added tests for unmapped field, random heuristics and use of a background_filter. Requested include/exclude tests already exist in this unit test.
1 parent 7112faa commit e0db9ec

File tree

2 files changed

+61
-16
lines changed

2 files changed

+61
-16
lines changed

core/src/test/java/org/elasticsearch/search/aggregations/bucket/significant/SignificanceHeuristicTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public void testStreamResponse() throws Exception {
135135
}
136136
}
137137

138-
SignificanceHeuristic getRandomSignificanceheuristic() {
138+
public static SignificanceHeuristic getRandomSignificanceheuristic() {
139139
List<SignificanceHeuristic> heuristics = new ArrayList<>();
140140
heuristics.add(new JLHScore());
141141
heuristics.add(new MutualInformation(randomBoolean(), randomBoolean()));

core/src/test/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorTests.java

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)