[ https://issues.apache.org/jira/browse/LUCENE-9005?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16951502#comment-16951502 ]
Michael Sokolov commented on LUCENE-9005: ----------------------------------------- Oh good catch. Will this d.t.r.t in the case of a BQ with a single optional clause? Or a single negative clause? I think so, but maybe a test case would help. Also, I think we should compare with Occur.MUST *and* Occur.FILTER - we need the same logic if there are any FILTER clauses, right? > BooleanQuery.visit() incorrectly pulls subvisitors from its parent > ------------------------------------------------------------------ > > Key: LUCENE-9005 > URL: https://issues.apache.org/jira/browse/LUCENE-9005 > Project: Lucene - Core > Issue Type: Bug > Reporter: Alan Woodward > Assignee: Alan Woodward > Priority: Major > Attachments: LUCENE-9005.patch > > > BooleanQuery.visit() calls getSubVisitor once for each of its clause sets; > however, this sub visitor is called on the passed-in visitor, which means > that sub clauses get attached to its parent, rather than a visitor for that > particular BQ. > To illustrate, consider the following nested BooleanQuery: ("a b" (+c +d %e > f)); we have a top-level disjunction query containing one phrase query > (essentially a conjunction), and one boolean query containing both MUST, > FILTER and SHOULD clauses. When visiting, the top level query will pull a > SHOULD subvisitor, and pass both queries into it. The phrase query will pull > a MUST subvisitor and all its two terms. The nested boolean will pull a > MUST, and FILTER and a SHOULD; but these are all attached to the parent > SHOULD visitor - in particular, the MUST and FILTER clauses will end up being > attached to this SHOULD visitor, and be mis-interpreted as a disjunction. > To fix this, BQ should first pull a MUST visitor and visit its MUST clauses > using this visitor; SHOULD, FILTER and MUST_NOT clauses should then be pulled > from this top-level MUST visitor. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org