List of usage examples for org.apache.lucene.util BitDocIdSet BitDocIdSet
public BitDocIdSet(BitSet set)
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); }