Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -807,7 +807,6 @@ public void testFunctionScoreQuery() throws Exception {
assertEquals(2, topDocs.scoreDocs[1].doc);
}

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

// This will trigger using the TermsQuery instead of individual term query clauses in the CoveringQuery:
int origMaxClauseCount = BooleanQuery.getMaxClauseCount();
try (Directory directory = new ByteBuffersDirectory()) {
final int maxClauseCount = 100;
BooleanQuery.setMaxClauseCount(maxClauseCount);
try (IndexWriter iw = new IndexWriter(directory, newIndexWriterConfig())) {
Document document = new Document();
for (int i = 0; i < 1024; i++) {
for (int i = 0; i < maxClauseCount; i++) {
int fieldNumber = 2 + i;
document.add(new StringField("field", "value" + fieldNumber, Field.Store.NO));
}
Expand All @@ -898,6 +900,8 @@ public void testPercolateSmallAndLargeDocument() throws Exception {
assertEquals(1, topDocs.scoreDocs[0].doc);
assertEquals(2, topDocs.scoreDocs[1].doc);
}
} finally {
BooleanQuery.setMaxClauseCount(origMaxClauseCount);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -337,33 +337,40 @@ public void testExtractTermsAndRanges() throws Exception {


public void testCreateCandidateQuery() throws Exception {
addQueryFieldMappings();

MemoryIndex memoryIndex = new MemoryIndex(false);
StringBuilder text = new StringBuilder();
for (int i = 0; i < 1022; i++) {
text.append(i).append(' ');
int origMaxClauseCount = BooleanQuery.getMaxClauseCount();
try {
final int maxClauseCount = 100;
BooleanQuery.setMaxClauseCount(maxClauseCount);
addQueryFieldMappings();

MemoryIndex memoryIndex = new MemoryIndex(false);
StringBuilder text = new StringBuilder();
for (int i = 0; i < maxClauseCount - 2; i++) {
text.append(i).append(' ');
}
memoryIndex.addField("field1", text.toString(), new WhitespaceAnalyzer());
memoryIndex.addField(new LongPoint("field2", 10L), new WhitespaceAnalyzer());
IndexReader indexReader = memoryIndex.createSearcher().getIndexReader();

Tuple<BooleanQuery, Boolean> t = fieldType.createCandidateQuery(indexReader, Version.CURRENT);
assertTrue(t.v2());
assertEquals(2, t.v1().clauses().size());
assertThat(t.v1().clauses().get(0).getQuery(), instanceOf(CoveringQuery.class));
assertThat(t.v1().clauses().get(1).getQuery(), instanceOf(TermQuery.class));

// Now push it over the edge, so that it falls back using TermInSetQuery
memoryIndex.addField("field2", "value", new WhitespaceAnalyzer());
indexReader = memoryIndex.createSearcher().getIndexReader();
t = fieldType.createCandidateQuery(indexReader, Version.CURRENT);
assertFalse(t.v2());
assertEquals(3, t.v1().clauses().size());
TermInSetQuery terms = (TermInSetQuery) t.v1().clauses().get(0).getQuery();
assertEquals(maxClauseCount - 1, terms.getTermData().size());
assertThat(t.v1().clauses().get(1).getQuery().toString(), containsString(fieldName + ".range_field:<ranges:"));
assertThat(t.v1().clauses().get(2).getQuery().toString(), containsString(fieldName + ".extraction_result:failed"));
} finally {
BooleanQuery.setMaxClauseCount(origMaxClauseCount);
}
memoryIndex.addField("field1", text.toString(), new WhitespaceAnalyzer());
memoryIndex.addField(new LongPoint("field2", 10L), new WhitespaceAnalyzer());
IndexReader indexReader = memoryIndex.createSearcher().getIndexReader();

Tuple<BooleanQuery, Boolean> t = fieldType.createCandidateQuery(indexReader, Version.CURRENT);
assertTrue(t.v2());
assertEquals(2, t.v1().clauses().size());
assertThat(t.v1().clauses().get(0).getQuery(), instanceOf(CoveringQuery.class));
assertThat(t.v1().clauses().get(1).getQuery(), instanceOf(TermQuery.class));

// Now push it over the edge, so that it falls back using TermInSetQuery
memoryIndex.addField("field2", "value", new WhitespaceAnalyzer());
indexReader = memoryIndex.createSearcher().getIndexReader();
t = fieldType.createCandidateQuery(indexReader, Version.CURRENT);
assertFalse(t.v2());
assertEquals(3, t.v1().clauses().size());
TermInSetQuery terms = (TermInSetQuery) t.v1().clauses().get(0).getQuery();
assertEquals(1023, terms.getTermData().size());
assertThat(t.v1().clauses().get(1).getQuery().toString(), containsString(fieldName + ".range_field:<ranges:"));
assertThat(t.v1().clauses().get(2).getQuery().toString(), containsString(fieldName + ".extraction_result:failed"));
}

public void testExtractTermsAndRanges_numberFields() throws Exception {
Expand Down