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

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

I'm expecting that this would mostly be an issue for users who use inner 
boolean queries as a way to work around the maximum clause count. That said I 
understand how this change can be surprising, and it should be easy enough to 
check the clause count in the rewrite rule so I'd be ok with doing this. Would 
you like to work on a patch?

I opened LUCENE-8811 to maybe re-think the way that we check the number of 
clauses of queries in a more consistent way.

bq. I do not know what is "block-max WAND" (line 479 of BooleanQuery).

It is an optimized way to retrieve top hits of disjunctions (boolean queries 
with only SHOULD clauses) by decreasing score. It works by ignoring low-scoring 
clauses, and works better when disjunctions are inlined since this gives more 
information to the algorithm.

> 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
>
>
> 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

Reply via email to