Example usage for org.apache.lucene.util BitDocIdSet BitDocIdSet

List of usage examples for org.apache.lucene.util BitDocIdSet BitDocIdSet

Introduction

In this page you can find the example usage for org.apache.lucene.util BitDocIdSet BitDocIdSet.

Prototype

public BitDocIdSet(BitSet set) 

Source Link

Document

Same as #BitDocIdSet(BitSet,long) but uses the set's BitSet#approximateCardinality() approximate cardinality as a cost.

Usage

From source file:DocIdSetBenchmark.java

License:Apache License

private static Collection<Map.Entry<Class<?>, DocIdSet>> sets(int numBits, float load) throws IOException {
    final BitDocIdSet fixedSet = new BitDocIdSet(randomSet(numBits, load));
    final List<Map.Entry<Class<?>, DocIdSet>> sets = new ArrayList<>();
    sets.add(new AbstractMap.SimpleImmutableEntry<Class<?>, DocIdSet>(FixedBitSet.class, fixedSet));
    for (DocIdSetFactory factory : FACTORIES) {
        sets.add(new AbstractMap.SimpleImmutableEntry<Class<?>, DocIdSet>(factory.getKey(),
                factory.copyOf(fixedSet, numBits)));
    }/* ww  w.j av a  2 s .c  o m*/
    return sets;
}

From source file:com.b2international.index.lucene.DocIdCollector.java

License:Apache License

/**
 * Returns with the {@link DocIds} instance.
 * @return the document IDs./*  w w w  .j  ava  2  s  .  c o m*/
 */
public DocIds getDocIDs() {

    return new DocIds() {

        @Override
        public int size() {
            return numDocIds;
        }

        @Override
        public DocIdsIterator iterator() throws IOException {
            return new DocIdsIterator() {

                private DocIdSetIterator docIdSetItr = new BitDocIdSet(docIds).iterator();
                private int nextDoc;

                @Override
                public boolean next() {

                    try {

                        nextDoc = docIdSetItr.nextDoc();
                        return nextDoc != DocIdSetIterator.NO_MORE_DOCS;

                    } catch (final IOException e) {

                        //this cannot happen as we are iterating over a bit set
                        nextDoc = DocIdSetIterator.NO_MORE_DOCS;

                        return false;

                    }

                }

                @Override
                public int getDocID() {
                    return nextDoc;
                }
            };
        }

        @Override
        public DocIdSet getDocIDs() {
            return new BitDocIdSet(docIds);
        }
    };

}

From source file:de.unihildesheim.iw.lucene.document.FeedbackQuery.java

License:Open Source License

/**
 * Tries to get the minimum number of document without {@link
 * RelaxableQuery#relax() relaxing} the query. If the minimum number of
 * documents is not reached without relaxing at most the maximum number of
 * documents is returned while relaxing the query.
 *
 * @param searcher Searcher to issue queries
 * @param query Relaxable query to get matching documents
 * @param minDocs Minimum number of documents to get. Must be greater than
 * zero./*from w w  w  . j  a  v a  2  s.c  om*/
 * @param maxDocCount Maximum number of documents to get. {@code -1} for
 * unlimited or greater than zero.
 * @return List of documents matching the (relaxed) query. Ranking order is
 * not preserved!
 * @throws IOException Thrown on low-level I/O errors
 */
public static DocIdSet getMinMax(@NotNull final IndexSearcher searcher, @NotNull final RelaxableQuery query,
        final int minDocs, final int maxDocCount) throws IOException {
    final int maxDocs;

    if (maxDocCount == -1) {
        maxDocs = Integer.MAX_VALUE;
    } else if (maxDocCount < 0) {
        throw new IllegalArgumentException(
                "Maximum number of documents must " + "be -1 (unlimited) or greater than zero.");
    } else if (maxDocCount < minDocs) {
        throw new IllegalArgumentException(
                "Maximum number of documents must " + "be greater than minimum value.");
    } else {
        maxDocs = maxDocCount;
    }
    if (minDocs <= 0) {
        throw new IllegalArgumentException("Minimum number of documents must be" + " greater than zero.");
    }

    final int maxRetDocs = getMaxDocs(searcher.getIndexReader(), maxDocs);
    final FixedBitSet bits = new FixedBitSet(searcher.getIndexReader().maxDoc());
    bits.or(BitsUtils.arrayToBits(getDocs(searcher, query.getQueryObj(), maxRetDocs)));

    // build a log-info string
    final String logInfo = "Got {} matching feedback documents. " + "Relaxing query to "
            + (maxDocCount > 0 ? "get additional" : "reach the minimum of") + " {} feedback documents...";

    int docsToGet;
    int bitsCount;
    while ((bitsCount = bits.cardinality()) < minDocs && query.relax()) {
        docsToGet = maxRetDocs - bitsCount;
        LOG.info(logInfo, bitsCount, docsToGet);

        final int[] docs = getDocs(searcher, query.getQueryObj(), maxRetDocs);
        int maxAdd = maxDocs - bitsCount;

        for (int i = docs.length - 1; i >= 0 && maxAdd > 0; i--) {
            if (!bits.getAndSet(docs[i])) {
                maxAdd--;
            }
        }
    }

    LOG.info("Returning {} documents.", bits.cardinality());
    return new BitDocIdSet(bits);
}

From source file:de.unihildesheim.iw.lucene.search.EmptyFieldFilter.java

License:Open Source License

@Override
public DocIdSet getDocIdSet(@NotNull final LeafReaderContext context, @Nullable final Bits acceptDocs)
        throws IOException {
    FixedBitSet checkBits;// ww w .ja v  a2 s . c om
    final LeafReader reader = context.reader();
    final int maxDoc = reader.maxDoc();

    BitSet finalBits = new SparseFixedBitSet(maxDoc);
    if (acceptDocs == null) {
        checkBits = BitsUtils.bits2FixedBitSet(reader.getLiveDocs());
        if (checkBits == null) {
            // all live
            checkBits = new FixedBitSet(maxDoc);
            checkBits.set(0, checkBits.length());
        }
    } else {
        checkBits = BitsUtils.bits2FixedBitSet(acceptDocs);
    }

    @Nullable
    final Terms terms = reader.terms(this.field);
    if (terms != null) {
        final int termsDocCount = terms.getDocCount();

        if (termsDocCount != 0) {
            if (termsDocCount == maxDoc) {
                // all matching
                finalBits = checkBits;
            } else {
                @Nullable
                final Terms t = reader.terms(this.field);
                if (t != null) {
                    PostingsEnum pe = null;
                    final TermsEnum te = t.iterator(null);
                    int docId;
                    while (te.next() != null) {
                        pe = te.postings(checkBits, pe, (int) PostingsEnum.NONE);
                        while ((docId = pe.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
                            if (checkBits.getAndClear(docId)) {
                                finalBits.set(docId);
                            }
                        }
                    }
                }
            }
        }
    }
    return new BitDocIdSet(finalBits);
}

From source file:de.unihildesheim.iw.lucene.search.IPCFieldFilter.java

License:Open Source License

@Override
public DocIdSet getDocIdSet(@NotNull final LeafReaderContext context, @Nullable final Bits acceptDocs)
        throws IOException {
    final LeafReader reader = context.reader();
    final int maxDoc = reader.maxDoc();
    final BitSet finalBits = new SparseFixedBitSet(maxDoc);

    if (acceptDocs == null) {
        // check all
        for (int i = 0; i < maxDoc; i++) {
            if (this.filterFunc.isAccepted(reader, i, this.ipcParser)) {
                finalBits.set(i);//from  w w w  .j a  v  a  2s.c om
            }
        }
    } else {
        final BitSet checkBits = BitsUtils.bits2BitSet(acceptDocs);
        final DocIdSetIterator disi = new BitDocIdSet(checkBits).iterator();
        int docId;
        while ((docId = disi.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
            if (this.filterFunc.isAccepted(reader, docId, this.ipcParser)) {
                finalBits.set(docId);
            }
        }
    }

    return new BitDocIdSet(finalBits);
}

From source file:de.unihildesheim.iw.lucene.util.DocIdSetUtilsTest.java

License:Open Source License

@Test
public void testCardinality_empty() throws Exception {
    final BitSet bits = new FixedBitSet(10);

    Assert.assertEquals("Cardinality mismatch", 0L, (long) DocIdSetUtils.cardinality(new BitDocIdSet(bits)));
}

From source file:de.unihildesheim.iw.lucene.util.DocIdSetUtilsTest.java

License:Open Source License

@Test
public void testMaxDoc_empty() throws Exception {
    final BitSet bits = new FixedBitSet(10);

    Assert.assertEquals("Cardinality mismatch", -1L, (long) DocIdSetUtils.maxDoc(new BitDocIdSet(bits)));
}

From source file:de.unihildesheim.iw.lucene.util.DocIdSetUtilsTest.java

License:Open Source License

@Test
public void testMaxDoc_first() throws Exception {
    final BitSet bits = new FixedBitSet(10);
    bits.set(0);/*w w  w  . j  a v a  2 s.  c  o m*/

    Assert.assertEquals("Cardinality mismatch", 0L, (long) DocIdSetUtils.maxDoc(new BitDocIdSet(bits)));
}

From source file:de.unihildesheim.iw.lucene.util.DocIdSetUtilsTest.java

License:Open Source License

@SuppressWarnings("ConstantConditions")
@Test/*from   w  ww .  ja  va2  s .c o  m*/
public void testBits_empty() throws Exception {
    final BitSet bits = new FixedBitSet(10);

    Assert.assertEquals("Cardinality mismatch", 0L,
            (long) DocIdSetUtils.bits(new BitDocIdSet(bits)).cardinality());
}

From source file:org.alfresco.solr.query.BitsFilter.java

License:Open Source License

public DocIdSet getDocIdSet(LeafReaderContext context, Bits bits) {
    return BitsFilteredDocIdSet.wrap(new BitDocIdSet(bitSets.get(context.ord)), bits);
}