Skip to content

Commit 9dceb86

Browse files
authored
Address recent percolator failures. (#75620)
They are due to changes to `indices.query.bool.max_clause_count` that got pushed in #75297. Closes #75591 Closes #75592
1 parent fc37cfc commit 9dceb86

File tree

2 files changed

+39
-28
lines changed

2 files changed

+39
-28
lines changed

modules/percolator/src/test/java/org/elasticsearch/percolator/CandidateQueryTests.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -807,7 +807,6 @@ public void testFunctionScoreQuery() throws Exception {
807807
assertEquals(2, topDocs.scoreDocs[1].doc);
808808
}
809809

810-
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/75592")
811810
public void testPercolateSmallAndLargeDocument() throws Exception {
812811
List<LuceneDocument> docs = new ArrayList<>();
813812
BooleanQuery.Builder builder = new BooleanQuery.Builder();
@@ -869,10 +868,13 @@ public void testPercolateSmallAndLargeDocument() throws Exception {
869868
}
870869

871870
// This will trigger using the TermsQuery instead of individual term query clauses in the CoveringQuery:
871+
int origMaxClauseCount = BooleanQuery.getMaxClauseCount();
872872
try (Directory directory = new ByteBuffersDirectory()) {
873+
final int maxClauseCount = 100;
874+
BooleanQuery.setMaxClauseCount(maxClauseCount);
873875
try (IndexWriter iw = new IndexWriter(directory, newIndexWriterConfig())) {
874876
Document document = new Document();
875-
for (int i = 0; i < 1024; i++) {
877+
for (int i = 0; i < maxClauseCount; i++) {
876878
int fieldNumber = 2 + i;
877879
document.add(new StringField("field", "value" + fieldNumber, Field.Store.NO));
878880
}
@@ -898,6 +900,8 @@ public void testPercolateSmallAndLargeDocument() throws Exception {
898900
assertEquals(1, topDocs.scoreDocs[0].doc);
899901
assertEquals(2, topDocs.scoreDocs[1].doc);
900902
}
903+
} finally {
904+
BooleanQuery.setMaxClauseCount(origMaxClauseCount);
901905
}
902906
}
903907

modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorFieldMapperTests.java

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -337,33 +337,40 @@ public void testExtractTermsAndRanges() throws Exception {
337337

338338

339339
public void testCreateCandidateQuery() throws Exception {
340-
addQueryFieldMappings();
341-
342-
MemoryIndex memoryIndex = new MemoryIndex(false);
343-
StringBuilder text = new StringBuilder();
344-
for (int i = 0; i < 1022; i++) {
345-
text.append(i).append(' ');
340+
int origMaxClauseCount = BooleanQuery.getMaxClauseCount();
341+
try {
342+
final int maxClauseCount = 100;
343+
BooleanQuery.setMaxClauseCount(maxClauseCount);
344+
addQueryFieldMappings();
345+
346+
MemoryIndex memoryIndex = new MemoryIndex(false);
347+
StringBuilder text = new StringBuilder();
348+
for (int i = 0; i < maxClauseCount - 2; i++) {
349+
text.append(i).append(' ');
350+
}
351+
memoryIndex.addField("field1", text.toString(), new WhitespaceAnalyzer());
352+
memoryIndex.addField(new LongPoint("field2", 10L), new WhitespaceAnalyzer());
353+
IndexReader indexReader = memoryIndex.createSearcher().getIndexReader();
354+
355+
Tuple<BooleanQuery, Boolean> t = fieldType.createCandidateQuery(indexReader, Version.CURRENT);
356+
assertTrue(t.v2());
357+
assertEquals(2, t.v1().clauses().size());
358+
assertThat(t.v1().clauses().get(0).getQuery(), instanceOf(CoveringQuery.class));
359+
assertThat(t.v1().clauses().get(1).getQuery(), instanceOf(TermQuery.class));
360+
361+
// Now push it over the edge, so that it falls back using TermInSetQuery
362+
memoryIndex.addField("field2", "value", new WhitespaceAnalyzer());
363+
indexReader = memoryIndex.createSearcher().getIndexReader();
364+
t = fieldType.createCandidateQuery(indexReader, Version.CURRENT);
365+
assertFalse(t.v2());
366+
assertEquals(3, t.v1().clauses().size());
367+
TermInSetQuery terms = (TermInSetQuery) t.v1().clauses().get(0).getQuery();
368+
assertEquals(maxClauseCount - 1, terms.getTermData().size());
369+
assertThat(t.v1().clauses().get(1).getQuery().toString(), containsString(fieldName + ".range_field:<ranges:"));
370+
assertThat(t.v1().clauses().get(2).getQuery().toString(), containsString(fieldName + ".extraction_result:failed"));
371+
} finally {
372+
BooleanQuery.setMaxClauseCount(origMaxClauseCount);
346373
}
347-
memoryIndex.addField("field1", text.toString(), new WhitespaceAnalyzer());
348-
memoryIndex.addField(new LongPoint("field2", 10L), new WhitespaceAnalyzer());
349-
IndexReader indexReader = memoryIndex.createSearcher().getIndexReader();
350-
351-
Tuple<BooleanQuery, Boolean> t = fieldType.createCandidateQuery(indexReader, Version.CURRENT);
352-
assertTrue(t.v2());
353-
assertEquals(2, t.v1().clauses().size());
354-
assertThat(t.v1().clauses().get(0).getQuery(), instanceOf(CoveringQuery.class));
355-
assertThat(t.v1().clauses().get(1).getQuery(), instanceOf(TermQuery.class));
356-
357-
// Now push it over the edge, so that it falls back using TermInSetQuery
358-
memoryIndex.addField("field2", "value", new WhitespaceAnalyzer());
359-
indexReader = memoryIndex.createSearcher().getIndexReader();
360-
t = fieldType.createCandidateQuery(indexReader, Version.CURRENT);
361-
assertFalse(t.v2());
362-
assertEquals(3, t.v1().clauses().size());
363-
TermInSetQuery terms = (TermInSetQuery) t.v1().clauses().get(0).getQuery();
364-
assertEquals(1023, terms.getTermData().size());
365-
assertThat(t.v1().clauses().get(1).getQuery().toString(), containsString(fieldName + ".range_field:<ranges:"));
366-
assertThat(t.v1().clauses().get(2).getQuery().toString(), containsString(fieldName + ".extraction_result:failed"));
367374
}
368375

369376
public void testExtractTermsAndRanges_numberFields() throws Exception {

0 commit comments

Comments
 (0)