List of usage examples for org.apache.lucene.search DocIdSetIterator nextDoc
public abstract int nextDoc() throws IOException;
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; } }; }