Robert Muir created LUCENE-4300:
-----------------------------------
Summary: BooleanQuery inconsistently applies coord() if it
rewrites itself
Key: LUCENE-4300
URL: https://issues.apache.org/jira/browse/LUCENE-4300
Project: Lucene - Core
Issue Type: Bug
Reporter: Robert Muir
Tripped by the new random sim from LUCENE-4297:
The basics are this:
* BooleanQuery has the following rewrite():
{code}
public Query rewrite(IndexReader reader) throws IOException {
if (minNrShouldMatch == 0 && clauses.size() == 1) { //
optimize 1-clause queries
{code}
* you have a coord() impl that doesnt return 1.0 if overlap == maxOverlap,
particularly:
{code}
return overlap / ((float)maxOverlap + 1);
{code}
* TestBooleanMinShouldMatch.testRandomQueries generates random boolean queries
(Q1), then compares the scores of the random query to the same query but with
minNrShouldmatch applied to its should clauses (Q2)
* in the case of a single term BQ, the rewrite applies to Q1, making it a term
query, but not to Q2. so the coord() only gets called for Q2, not Q1. and with
this crazy coord it means the scores are different.
I think the rewrite is wrong, we should also rewrite single-query BQs where
minNrShouldMatch = 1 and there is a single optional clause.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]