Package org.apache.lucene.util

Examples of org.apache.lucene.util.OpenBitSetDISI


    } else {
      final DocIdSetIterator it = docIdSet.iterator();
      // null is allowed to be returned by iterator(),
      // in this case we wrap with the empty set,
      // which is cacheable.
      return (it == null) ? DocIdSet.EMPTY_DOCIDSET : new OpenBitSetDISI(it, reader.maxDoc());
    }
  }
View Full Code Here


    final int numDocs;
   
    public DocumentFilteredIndexReader(IndexReader reader, Filter preserveFilter, boolean negateFilter) throws IOException {
      super(reader);
     
      final OpenBitSetDISI bits = new OpenBitSetDISI(in.maxDoc());
      final DocIdSet docs = preserveFilter.getDocIdSet(in);
      if (docs != null) {
        final DocIdSetIterator it = docs.iterator();
        if (it != null) {
          bits.inPlaceOr(it);
        }
      }
      // this is somehow inverse, if we negate the filter, we delete all documents it matches!
      if (!negateFilter) {
        bits.flip(0, in.maxDoc());
      }

      if (in.hasDeletions()) {
        for (int i = 0; i < in.maxDoc(); i++) {
          if (in.isDeleted(i)) {
            bits.set(i);
          }
        }
      }
     
      this.readerDels = bits;
      this.numDocs = in.maxDoc() - (int) bits.cardinality();
    }
View Full Code Here

    } else {
      final DocIdSetIterator it = docIdSet.iterator();
      // null is allowed to be returned by iterator(),
      // in this case we wrap with the empty set,
      // which is cacheable.
      return (it == null) ? DocIdSet.EMPTY_DOCIDSET : new OpenBitSetDISI(it, reader.maxDoc());
    }
  }
View Full Code Here

  }

  private OpenBitSetDISI initialResult(AtomicReaderContext context, int logic, int[] index)
      throws IOException {
    AtomicReader reader = context.reader();
    OpenBitSetDISI result;
    /**
     * First AND operation takes place against a completely false
     * bitset and will always return zero results.
     */
    if (logic == AND) {
      result = new OpenBitSetDISI(getDISI(chain[index[0]], context), reader.maxDoc());
      ++index[0];
    } else if (logic == ANDNOT) {
      result = new OpenBitSetDISI(getDISI(chain[index[0]], context), reader.maxDoc());
      result.flip(0, reader.maxDoc()); // NOTE: may set bits for deleted docs.
      ++index[0];
    } else {
      result = new OpenBitSetDISI(reader.maxDoc());
    }
    return result;
  }
View Full Code Here

   * @param logic Logical operation
   * @return DocIdSet
   */
  private DocIdSet getDocIdSet(AtomicReaderContext context, int logic, int[] index)
      throws IOException {
    OpenBitSetDISI result = initialResult(context, logic, index);
    for (; index[0] < chain.length; index[0]++) {
      // we dont pass acceptDocs, we will filter at the end using an additional filter
      doChain(result, logic, chain[index[0]].getDocIdSet(context, null));
    }
    return result;
View Full Code Here

      throws IOException {
    if (logic.length != chain.length) {
      throw new IllegalArgumentException("Invalid number of elements in logic array");
    }

    OpenBitSetDISI result = initialResult(context, logic[0], index);
    for (; index[0] < chain.length; index[0]++) {
      // we dont pass acceptDocs, we will filter at the end using an additional filter
      doChain(result, logic[index[0]], chain[index[0]].getDocIdSet(context, null));
    }
    return result;
View Full Code Here

      @Override
      public int size() {
        // lazy size computation
        if (size < 0) {
          OpenBitSetDISI openBitSetDISI;
          try {
            openBitSetDISI = new OpenBitSetDISI(docIdSet.iterator(), maxDoc);
          } catch (IOException e) {
            throw new RuntimeException(e);
          }
          size = (int) openBitSetDISI.cardinality();
        }
        return size;
      }
    };
  }
View Full Code Here

   * of the filters that have been added.
   */
  @Override
  public DocIdSet getDocIdSet(IndexReader reader) throws IOException
  {
    OpenBitSetDISI res = null;
 
    if (shouldFilters != null) {
      for (int i = 0; i < shouldFilters.size(); i++) {
        if (res == null) {
          res = new OpenBitSetDISI(getDISI(shouldFilters, i, reader), reader.maxDoc());
        } else {
          DocIdSet dis = shouldFilters.get(i).getDocIdSet(reader);
          if(dis instanceof OpenBitSet) {
            // optimized case for OpenBitSets
            res.or((OpenBitSet) dis);
          } else {
            res.inPlaceOr(getDISI(shouldFilters, i, reader));
          }
        }
      }
    }
   
    if (notFilters!=null) {
      for (int i = 0; i < notFilters.size(); i++) {
        if (res == null) {
          res = new OpenBitSetDISI(getDISI(notFilters, i, reader), reader.maxDoc());
          res.flip(0, reader.maxDoc()); // NOTE: may set bits on deleted docs
        } else {
          DocIdSet dis = notFilters.get(i).getDocIdSet(reader);
          if(dis instanceof OpenBitSet) {
            // optimized case for OpenBitSets
            res.andNot((OpenBitSet) dis);
          } else {
            res.inPlaceNot(getDISI(notFilters, i, reader));
          }
        }
      }
    }
   
    if (mustFilters!=null) {
      for (int i = 0; i < mustFilters.size(); i++) {
        if (res == null) {
          res = new OpenBitSetDISI(getDISI(mustFilters, i, reader), reader.maxDoc());
        } else {
          DocIdSet dis = mustFilters.get(i).getDocIdSet(reader);
          if(dis instanceof OpenBitSet) {
            // optimized case for OpenBitSets
            res.and((OpenBitSet) dis);
          } else {
            res.inPlaceAnd(getDISI(mustFilters, i, reader));
          }
        }
      }
    }
   
View Full Code Here

    }

    private OpenBitSetDISI initialResult(IndexReader reader, int logic, int[] index)
    throws IOException
    {
        OpenBitSetDISI result;
        /**
         * First AND operation takes place against a completely false
         * bitset and will always return zero results.
         */
        if (logic == AND)
        {
            result = new OpenBitSetDISI(getDISI(chain[index[0]], reader), reader.maxDoc());
            ++index[0];
        }
        else if (logic == ANDNOT)
        {
            result = new OpenBitSetDISI(getDISI(chain[index[0]], reader), reader.maxDoc());
            result.flip(0,reader.maxDoc()); // NOTE: may set bits for deleted docs.
            ++index[0];
        }
        else
        {
            result = new OpenBitSetDISI(reader.maxDoc());
        }
        return result;
    }
View Full Code Here

     * @return DocIdSet
     */
    private DocIdSet getDocIdSet(IndexReader reader, int logic, int[] index)
    throws IOException
    {
        OpenBitSetDISI result = initialResult(reader, logic, index);
        for (; index[0] < chain.length; index[0]++)
        {
            doChain(result, logic, chain[index[0]].getDocIdSet(reader));
        }
        return finalResult(result, reader.maxDoc());
View Full Code Here

TOP

Related Classes of org.apache.lucene.util.OpenBitSetDISI

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.