Example usage for org.apache.lucene.search DocIdSetIterator nextDoc

List of usage examples for org.apache.lucene.search DocIdSetIterator nextDoc

Introduction

In this page you can find the example usage for org.apache.lucene.search DocIdSetIterator nextDoc.

Prototype

public abstract int nextDoc() throws IOException;

Source Link

Document

Advances to the next document in the set and returns the doc it is currently on, or #NO_MORE_DOCS if there are no more docs in the set.
NOTE: after the iterator has exhausted you should not call this method, as it may result in unpredicted behavior.

Usage

From source file:DocIdSetBenchmark.java

License:Apache License

private static int exhaustIterator(DocIdSet set) throws IOException {
    int dummy = 0;
    final DocIdSetIterator it = set.iterator();
    for (int doc = it.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = it.nextDoc()) {
        dummy += doc;/*  w  w  w  . ja v a2s  .  co m*/
    }
    return dummy;
}

From source file:arena.lucene.LuceneIndexSearcherImpl.java

License:Open Source License

protected TopDocs executeSearch(IndexSearcher searcher, Query query, Filter filter, Sort sort,
        int collectorLimit) throws IOException {
    // Decide on how to search based on which elements of the lucene query model are available
    if (query != null) {
        // Full scoring search
        TopDocsCollector<? extends ScoreDoc> collector = null;
        if (sort == null) {
            collector = TopScoreDocCollector.create(collectorLimit, true);
        } else {/*from  www  . j  a  v  a  2s . co m*/
            SortField sortFields[] = sort.getSort();
            if (sortFields != null && sortFields.length > 0 && sortFields[0].getType() == SortField.SCORE
                    && !sortFields[0].getReverse()) {
                collector = TopScoreDocCollector.create(collectorLimit, true);
            } else {
                collector = TopFieldCollector.create(sort, collectorLimit, false, true, true, true);
            }
        }
        searcher.search(query, filter, collector);
        return collector.topDocs();

    } else if (filter != null) {
        // No query = no need for scoring, just dump the results into a hit collector that runs 
        // off the results in the order we want 
        DocIdSetIterator filterMatchesIterator = filter.getDocIdSet(searcher.getIndexReader()).iterator();
        if (sort == null) {
            // no sort available, so the natural iteration order is fine
            // if we have an iterator that means sorting is already handled, so just pull off the first n rows into the output
            ScoreDoc[] scoreDocs = new ScoreDoc[collectorLimit];
            int found = 0;
            int docId;
            while (found < collectorLimit
                    && (docId = filterMatchesIterator.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
                scoreDocs[found++] = new ScoreDoc(docId, 1f);
            }
            return new TopDocs(found, found < collectorLimit ? Arrays.copyOf(scoreDocs, found) : scoreDocs, 1f);
        } else {
            TopDocsCollector<? extends ScoreDoc> collector = TopFieldCollector.create(sort, collectorLimit,
                    false, true, true, true);
            int docId;
            while ((docId = filterMatchesIterator.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
                collector.collect(docId);
            }
            return collector.topDocs();

        }
    } else if (sort != null) {
        // no query and no filter so no score but add every doc in the index for non-score sorting            
        TopDocsCollector<? extends ScoreDoc> collector = TopFieldCollector.create(sort, collectorLimit, false,
                true, true, true);
        int numDocs = searcher.getIndexReader().numDocs();
        for (int n = 0; n < numDocs; n++) {
            collector.collect(n);
        }
        return collector.topDocs();
    } else {
        // no query filter or sort: return the top n docs
        ScoreDoc[] scoreDocs = new ScoreDoc[Math.min(collectorLimit, searcher.getIndexReader().numDocs())];

        for (int n = 0; n < scoreDocs.length; n++) {
            scoreDocs[n] = new ScoreDoc(n, 1f);
        }
        return new TopDocs(scoreDocs.length, scoreDocs, 1f);
    }
}

From source file:com.browseengine.bobo.facets.attribute.AttributesFacetHandlerTest.java

License:Apache License

public void test1Filter() throws Exception {
    BrowseRequest request = createRequest(1, "prop3");
    FacetCountCollectorSource facetCountCollectorSource = attributesFacetHandler.getFacetCountCollectorSource(
            request.getSelection(AttributeHandlerName), request.getFacetSpec(AttributeHandlerName));
    RandomAccessFilter randomAccessFilter = attributesFacetHandler
            .buildFilter(request.getSelection(AttributeHandlerName));
    DocIdSetIterator iterator = randomAccessFilter.getDocIdSet(boboReader).iterator();
    int docId = iterator.nextDoc();
    int[] docIds = new int[2];
    int i = 0;/*from   w w w  .  ja  va  2s  .  c o  m*/
    while (docId != iterator.NO_MORE_DOCS) {
        docIds[i] = docId;
        i++;
        docId = iterator.nextDoc();
    }
    assertEquals(Arrays.toString(new int[] { 1, 2 }), Arrays.toString(docIds));

    BrowseResult res = browser.browse(request);
    assertEquals(res.getNumHits(), 2);
    FacetAccessible fa = res.getFacetAccessor(AttributeHandlerName);
    List<BrowseFacet> facets = fa.getFacets();
    System.out.println(facets);
    assertEquals(3, facets.size());
    BrowseFacet facet = facets.get(0);
    assertEquals(1, facet.getFacetValueHitCount());
}

From source file:com.floragunn.searchguard.configuration.DlsFlsFilterLeafReader.java

License:Open Source License

DlsFlsFilterLeafReader(final LeafReader delegate, final Set<String> includes, final Query dlsQuery) {
    super(delegate);

    flsEnabled = includes != null && !includes.isEmpty();
    dlsEnabled = dlsQuery != null;//from w ww. j  a  va 2  s . c  o  m

    if (flsEnabled) {
        this.includes = includes.toArray(new String[0]);
        final FieldInfos infos = delegate.getFieldInfos();

        final List<FieldInfo> fi = new ArrayList<FieldInfo>(infos.size());
        for (final FieldInfo info : infos) {
            final String fname = info.name;
            if ((!WildcardMatcher.containsWildcard(fname) && includes.contains(fname))
                    || WildcardMatcher.matchAny(this.includes, fname)) {
                fi.add(info);
            }
        }

        this.flsFieldInfos = new FieldInfos(fi.toArray(new FieldInfo[0]));
    } else {
        this.includes = null;
        this.flsFieldInfos = null;
    }

    if (dlsEnabled) {
        try {

            //borrowed from Apache Lucene (Copyright Apache Software Foundation (ASF))
            final IndexSearcher searcher = new IndexSearcher(this);
            searcher.setQueryCache(null);
            final boolean needsScores = false;
            final Weight preserveWeight = searcher.createNormalizedWeight(dlsQuery, needsScores);

            final int maxDoc = in.maxDoc();
            final FixedBitSet bits = new FixedBitSet(maxDoc);
            final Scorer preverveScorer = preserveWeight.scorer(this.getContext());
            if (preverveScorer != null) {
                bits.or(preverveScorer.iterator());
            }

            if (in.hasDeletions()) {
                final Bits oldLiveDocs = in.getLiveDocs();
                assert oldLiveDocs != null;
                final DocIdSetIterator it = new BitSetIterator(bits, 0L);
                for (int i = it.nextDoc(); i != DocIdSetIterator.NO_MORE_DOCS; i = it.nextDoc()) {
                    if (!oldLiveDocs.get(i)) {
                        bits.clear(i);
                    }
                }
            }

            this.liveDocs = bits;
            this.numDocs = bits.cardinality();

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    } else {
        this.liveDocs = null;
        this.numDocs = -1;
    }
}

From source file:com.meltwater.elasticsearch.index.BatchPercolatorService.java

License:Apache License

private boolean hasDocumentMatchingFilter(IndexReader reader, Optional<Filter> optionalFilter)
        throws IOException {
    if (optionalFilter.isPresent()) {
        Filter filter = optionalFilter.get();
        boolean found = false;
        // If you are not familiar with Lucene, this basically means that we try to
        // create an iterator for valid id:s for the filter for the given reader.
        // The filter and DocIdSet can both return null, to enable optimisations,
        // thus the null-checks. Null means that there were no matching docs, and
        // the same is true if the iterator refers to NO_MORE_DOCS immediately.
        for (AtomicReaderContext leaf : reader.leaves()) {
            DocIdSet idSet = filter.getDocIdSet(leaf, leaf.reader().getLiveDocs());
            if (idSet != null) {
                DocIdSetIterator iter = idSet.iterator();
                if (iter != null && iter.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
                    found = true;//from w  ww . java  2  s  . c  o m
                    break;
                }

            }
        }
        return found;
    } else {
        return true;
    }
}

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

License:Open Source License

private static int getNumDocsFromSet(final DocIdSet set) throws IOException {
    final DocIdSetIterator disi = set.iterator();
    int count = 0;
    if (disi != null) {
        while (disi.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
            count++;//w ww  .  ja  v a 2  s .  c  o m
        }
    }
    return count;
}

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 ww w. j  a v a 2 s .c o  m
            }
        }
    } 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:javaewah.EWAHCompressedBitmapTest.java

License:Open Source License

/**
 * Convenience function to assess equality between an array and an iterator over
 * Integers/* w  w w  .  j a  v a  2 s .com*/
 *
 * @param i the iterator
 * @param array the array
 */
static void equal(DocIdSetIterator i, int[] array) {
    int cursor = 0;
    int doc;
    try {
        while ((doc = i.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
            int x = doc;
            int y = array[cursor++];
            if (x != y)
                throw new RuntimeException(x + " != " + y);
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

From source file:javaewah.EWAHCompressedBitmapTest.java

License:Open Source License

/**
 * Assess equality between an uncompressed bitmap and a compressed one,
 * part of a test contributed by Marc Polizzi
 *
 * @param jdkBitmap the jdk bitmap// w  w w .  jav  a  2s . c  o m
 * @param ewahBitmap the ewah bitmap
 */
static void assertEqualsIterator(BitSet jdkBitmap, EWAHCompressedBitmap ewahBitmap) throws IOException {
    final List<Integer> positions = new ArrayList<Integer>();
    final DocIdSetIterator iter = ewahBitmap.iterator();
    int doc;
    while ((doc = iter.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
        final int bit = doc;
        if (!jdkBitmap.get(bit)) {
            throw new RuntimeException("iterator: bitset got different bits");
        }
        positions.add(new Integer(bit));
    }
    for (int pos = jdkBitmap.nextSetBit(0); pos >= 0; pos = jdkBitmap.nextSetBit(pos + 1)) {
        if (!positions.contains(new Integer(pos))) {
            throw new RuntimeException("iterator: bitset got different bits");
        }
    }
}

From source file:lucene.security.search.BitSetDocumentVisibilityFilterCacheStrategy.java

License:Apache License

@Override
public Builder createBuilder(String fieldName, BytesRef term, final AtomicReader reader) {
    final OpenBitSet bitSet = new OpenBitSet(reader.maxDoc());
    final Key key = new Key(fieldName, term, reader.getCoreCacheKey());
    return new Builder() {
        @Override//ww w.  j a v  a  2s . co  m
        public void or(DocIdSetIterator it) throws IOException {
            int doc;
            while ((doc = it.nextDoc()) != DocsEnum.NO_MORE_DOCS) {
                bitSet.set(doc);
            }
        }

        @Override
        public DocIdSet getDocIdSet() throws IOException {
            reader.addReaderClosedListener(new ReaderClosedListener() {
                @Override
                public void onClose(IndexReader reader) {
                    DocIdSet docIdSet = _cache.remove(key);
                    if (docIdSet == null) {
                        LOG.warn("DocIdSet was missing for key [" + docIdSet + "]");
                    }
                }
            });
            _cache.put(key, bitSet);
            return bitSet;
        }
    };
}