Alan Woodward created LUCENE-9005: ------------------------------------- Summary: 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
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