Lucene - Core
  1. Lucene - Core
  2. LUCENE-3510

BooleanScorer should not limit number of prohibited clauses


    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.5, 4.0-ALPHA
    • Component/s: None
    • Labels:
    • Lucene Fields:


      Today it's limited to 32, because it uses a separate bit in the mask
      for each clause.

      But I don't understand why it does this; I think all prohibited
      clauses can share a single boolean/bit? Any match on a prohibited
      clause sets this bit and the doc is not collected; we don't need each
      prohibited clause to have a dedicated bit?

      We also use the mask for required clauses, but this code is now
      commented out (we always use BS2 if there are any required clauses);
      if we re-enable this code (and I think we should, at least in certain
      cases: I suspect it'd be faster than BS2 in many cases), I think we
      can cutover to an int count instead of bit masks, and then have no
      limit on the required clauses sent to BooleanScorer also.

      Separately I cleaned a few things up about BooleanScorer: all of the
      embedded scorer methods (nextDoc, docID, advance, score) now throw
      UOE; pre-allocate the buckets instead of doing it lazily

      1. LUCENE-3510.patch
        9 kB
        Michael McCandless


        Uwe Schindler made changes -
        Status Resolved [ 5 ] Closed [ 6 ]
        Michael McCandless made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Michael McCandless made changes -
        Field Original Value New Value
        Attachment LUCENE-3510.patch [ 12498651 ]
        Michael McCandless created issue -


          • Assignee:
            Michael McCandless
            Michael McCandless
          • Votes:
            0 Vote for this issue
            1 Start watching this issue


            • Created: