Issue Details (XML | Word | Printable)

Key: LUCENE-451
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Minor Minor
Assignee: Hoss Man
Reporter: Yonik Seeley
Votes: 1
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Lucene - Java

BooleanQuery explain with boost==0

Created: 12/Oct/05 12:56 AM   Updated: 27/Jun/06 01:40 AM
Return to search
Component/s: Search
Affects Version/s: CVS Nightly - Specify date in submission
Fix Version/s: None

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works bq.containing.clause.with.zero.boost.tests.patch 2006-06-22 05:06 AM Hoss Man 11 kB
Text File Licensed for inclusion in ASF works bq.containing.clause.with.zero.boost.tests.patch 2006-06-21 08:02 AM Hoss Man 11 kB
Text File Licensed for inclusion in ASF works bq.containing.clause.with.zero.boost.tests.patch 2006-06-20 08:49 AM Hoss Man 5 kB
Issue Links:
Dependants
 

Resolution Date: 27/Jun/06 01:40 AM


 Description  « Hide
BooleanWeight.explain() uses the returned score of subweights to determine if a clause matched.
If any required clause has boost==0, the returned score will be zero and the explain for the entire BooleanWeight will be simply Explanation(0.0f, "match required").

I'm not sure what the correct fix is here. I don't think it can be done based on score alone, since that isn't how scorers work. Perhaps we need a new method "boolean Explain.matched()" that returns true on a match, regardless of what the score may be?

Related to the problem above, even if no boosts are zero, it it sometimes nice to know why a particular query failed to match. It would mean a longer explanation, but maybe we should include non matching explains too?



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Paul Elschot added a comment - 12/Oct/05 03:13 AM
I fully agree, but IndexSearcher.java at line 107 does not conform,
it will only provide a hit when its score is positive.

Implementing Explanation.matched() could be more than a bit of work, because
many existing explain() methods will be need to be adapted.
Explanation.setMatched() would also be needed, although such a flag
could be set to true by default.

Regards,
Paul Elschot.


Hoss Man added a comment - 17/Jun/06 08:15 AM
LUCENE-605 will add suport for Explanation.isMatch()

Hoss Man added a comment - 20/Jun/06 08:49 AM
some test cases demonstrating discrepencies when a BooleanQuery has clauses of various types with boosts of 0.0. Some of these test cases may not be things we really want to commit (since the score is "NaN") but they still serve as a good example for the problem.

(much of this patch is modified from some other tests I had orriginally attached to LUCENE-557 but did not commit)


Hoss Man added a comment - 21/Jun/06 08:02 AM
a revised version of hte previous tst patch ... this fixes a lot of the things that made the tests "invalid" before – cheifly by:
1) using a Similarity that doesn't choke on boosts of 0.0
2) using a HitCollector to check matching (which is neccessary when matching docs have scores of 0)

..also in this patch is a tweak to the way the expected results are tested – first by looking at the set of matching documents then look at the explanations for those documents (which makes it obvious when your assumptions about what matches are wrong before you look at why the explanation doesn't equal what it should)


Hoss Man added a comment - 22/Jun/06 05:06 AM
slight bug in test2 - the old method of checking the results using Hits had a differnet set of matching docs because of negatively scoring matches. This version makes sense when using a HitCollector.

Hoss Man added a comment - 27/Jun/06 01:40 AM
With the code from LUCENE-605 all tests pass (and have been commited)