Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: core/search
    • Labels:
      None

      Description

      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?

        Issue Links

          Activity

          Hide
          Paul Elschot added a comment -

          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.

          Show
          Paul Elschot added a comment - 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.
          Hide
          Hoss Man added a comment -

          LUCENE-605 will add suport for Explanation.isMatch()

          Show
          Hoss Man added a comment - LUCENE-605 will add suport for Explanation.isMatch()
          Hide
          Hoss Man added a comment -

          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)

          Show
          Hoss Man added a comment - 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)
          Hide
          Hoss Man added a comment -

          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)

          Show
          Hoss Man added a comment - 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)
          Hide
          Hoss Man added a comment -

          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.

          Show
          Hoss Man added a comment - 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.
          Hide
          Hoss Man added a comment -

          With the code from LUCENE-605 all tests pass (and have been commited)

          Show
          Hoss Man added a comment - With the code from LUCENE-605 all tests pass (and have been commited)

            People

            • Assignee:
              Hoss Man
              Reporter:
              Yonik Seeley
            • Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development