[ 
https://issues.apache.org/jira/browse/LUCENE-8810?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17572021#comment-17572021
 ] 

Adrien Grand commented on LUCENE-8810:
--------------------------------------

Indeed this change no longer makes sense on 9.x since Lucene doesn't check the 
number of clauses per boolean query but globally, which makes more sense.

If you want to avoid getting this exception, you need to either avoid creating 
queries that have many clauses (e.g. using TermInSetQuery when applicable) or 
increase the maximum clause count (which is discouraged).

> 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.2
>
>         Attachments: LUCENE-8810.patch
>
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> 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
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to