[ https://issues.apache.org/jira/browse/LUCENE-8810?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16847343#comment-16847343 ]
Adrien Grand commented on LUCENE-8810: -------------------------------------- Doing instanceof checks feels too fragile to me, this won't work if the BooleanQuery is wrapped under a ConstantScoreQuery or a BoostQuery. We could consider using the visitor API instead, but this would make BooleanQuery construction run in quadratic time of the depth of the query (if you have a boolean query BQ1 that wraps BQ2, which itself wraps BQ3, the clause count of BQ2 will be checked by BQ1 and BQ2 and the clause count of BQ3 will be checked by BQ1, BQ2 and BQ3, etc.), which is why I thought of IndexSearcher, which is the place where we would have access to the top-level query. > Flattening of nested disjunctions does not take into account number of clause > limitation of builder > --------------------------------------------------------------------------------------------------- > > Key: LUCENE-8810 > URL: https://issues.apache.org/jira/browse/LUCENE-8810 > Project: Lucene - Core > Issue Type: Bug > Components: core/search > Affects Versions: 8.0 > Reporter: Mickaël Sauvée > Priority: Minor > Fix For: 8.1.1 > > Attachments: LUCENE-8810.patch > > > In org.apache.lucene.search.BooleanQuery, at the end of the function > rewrite(IndexReader reader), the query is rewritten to flatten nested > disjunctions. > This does not take into account the limitation on the number of clauses in a > builder (1024). > In some circumstances, this limite can be reached, hence an exception is > thrown. > Here is a unit test that highlight this. > {code:java} > public void testFlattenInnerDisjunctionsWithMoreThan1024Terms() throws > IOException { > IndexSearcher searcher = newSearcher(new MultiReader()); > BooleanQuery.Builder builder1024 = new BooleanQuery.Builder(); > for(int i = 0; i < 1024; i++) { > builder1024.add(new TermQuery(new Term("foo", "bar-" + i)), > Occur.SHOULD); > } > Query inner = builder1024.build(); > Query query = new BooleanQuery.Builder() > .add(inner, Occur.SHOULD) > .add(new TermQuery(new Term("foo", "baz")), Occur.SHOULD) > .build(); > searcher.rewrite(query); > } > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org