List of usage examples for org.apache.lucene.search DocIdSetIterator advance
public abstract int advance(int target) throws IOException;
From source file:org.elasticsearch.search.profile.ProfileScorer.java
License:Apache License
@Override public TwoPhaseIterator twoPhaseIterator() { final TwoPhaseIterator in = scorer.twoPhaseIterator(); if (in == null) { return null; }/* ww w . j a va 2s .co m*/ final DocIdSetIterator inApproximation = in.approximation(); final DocIdSetIterator approximation = new DocIdSetIterator() { @Override public int advance(int target) throws IOException { profile.startTime(ProfileBreakdown.TimingType.ADVANCE); try { return inApproximation.advance(target); } finally { profile.stopAndRecordTime(); } } @Override public int nextDoc() throws IOException { profile.startTime(ProfileBreakdown.TimingType.NEXT_DOC); try { return inApproximation.nextDoc(); } finally { profile.stopAndRecordTime(); } } @Override public int docID() { return inApproximation.docID(); } @Override public long cost() { return inApproximation.cost(); } }; return new TwoPhaseIterator(approximation) { @Override public boolean matches() throws IOException { profile.startTime(ProfileBreakdown.TimingType.MATCH); try { return in.matches(); } finally { profile.stopAndRecordTime(); } } @Override public float matchCost() { return in.matchCost(); } }; }
From source file:org.hibernate.search.filter.impl.AndDocIdSet.java
License:Open Source License
private DocIdSet makeDocIdSetOnAgreedBits(final DocIdSetIterator[] iterators) throws IOException { final OpenBitSet result = new OpenBitSet(maxDocNumber); final int numberOfIterators = iterators.length; int targetPosition = findFirstTargetPosition(iterators, result); if (targetPosition == DocIdSetIterator.NO_MORE_DOCS) { return DocIdSet.EMPTY_DOCIDSET; }//from w ww . j a v a 2 s. c om // Each iterator can vote "ok" for the current target to // be reached; when all agree the bit is set. // if an iterator disagrees (it jumped longer), it's current position becomes the new targetPosition // for the others and he is considered "first" in the voting round (every iterator votes for himself ;-) int i = 0; int votes = 0; //could be smarter but would make the code even more complex for a minor optimization out of cycle. // enter main loop: while (true) { final DocIdSetIterator iterator = iterators[i]; int position = targetPosition; if (!iteratorAlreadyOnTargetPosition(targetPosition, iterator)) { position = iterator.advance(targetPosition); } if (position == DocIdSetIterator.NO_MORE_DOCS) { return result; } //exit condition if (position == targetPosition) { if (++votes == numberOfIterators) { result.fastSet(position); votes = 0; targetPosition++; } } else { votes = 1; targetPosition = position; } i = ++i % numberOfIterators; } }
From source file:org.hibernate.search.test.filter.AndDocIdSetsTest.java
License:Open Source License
@Test public void testIteratorMatchesTestArray() throws IOException { DocIdSet docIdSet0_9 = arrayToDocIdSet(testDataFrom0to9); DocIdSetIterator docIdSetIterator = docIdSet0_9.iterator(); assertTrue(docIdSetIterator.nextDoc() != DocIdSetIterator.NO_MORE_DOCS); assertEquals(0, docIdSetIterator.docID()); assertEquals(9, docIdSetIterator.advance(9)); assertEquals(DocIdSetIterator.NO_MORE_DOCS, docIdSetIterator.advance(10)); }
From source file:org.hippoecm.repository.query.lucene.util.MultiDocIdSetTest.java
License:Apache License
@Test public void testAdvance() throws IOException { Random rand = new Random(13); int[] maxDoc = new int[NUM_BITSETS]; OpenBitSet[] bitsets = new OpenBitSet[NUM_BITSETS]; for (int i = 0; i < NUM_BITSETS; i++) { OpenBitSet bitset = bitsets[i] = new OpenBitSet(); for (int j = 0; j < NUM_DOCS_IN_BITSET; j++) { if (rand.nextInt(5) == 0) { bitset.set(j);/*from w w w. j a v a 2 s .c om*/ } } maxDoc[i] = NUM_DOCS_IN_BITSET; } int totalMaxDoc = NUM_BITSETS * NUM_DOCS_IN_BITSET; // compare nextDoc invocations with advance MultiDocIdSet docIdSet = new MultiDocIdSet(bitsets, maxDoc); final DocIdSetIterator simpleIterator = docIdSet.iterator(); final DocIdSetIterator advancedIterator = docIdSet.iterator(); int docId = 0; while (true) { final int delta = rand.nextInt(CHECK_INTERVAL); docId = docId + delta + 1; if (docId > totalMaxDoc) { break; } while (simpleIterator.docID() < docId && simpleIterator.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) ; advancedIterator.advance(docId); assertEquals(simpleIterator.docID(), advancedIterator.docID()); } }
From source file:org.tallison.lucene.search.concordance.charoffsets.SpansCrawler.java
License:Apache License
static boolean visitLeafReader(LeafReaderContext leafCtx, Spans spans, DocIdSetIterator filterItr, DocTokenOffsetsVisitor visitor) throws IOException, TargetTokenNotFoundException { int filterDoc = -1; int spansDoc = spans.nextDoc(); while (true) { if (spansDoc == DocIdSetIterator.NO_MORE_DOCS) { break; }//from ww w. ja va 2s . co m filterDoc = filterItr.advance(spansDoc); if (filterDoc == DocIdSetIterator.NO_MORE_DOCS) { break; } else if (filterDoc > spansDoc) { while (spansDoc <= filterDoc) { spansDoc = spans.nextDoc(); if (spansDoc == filterDoc) { boolean cont = visit(leafCtx, spans, visitor); if (!cont) { return false; } } else { continue; } } } else if (filterDoc == spansDoc) { boolean cont = visit(leafCtx, spans, visitor); if (!cont) { return false; } //then iterate spans spansDoc = spans.nextDoc(); } else if (filterDoc < spansDoc) { throw new IllegalArgumentException("FILTER doc is < spansdoc!!!"); } else { throw new IllegalArgumentException("Something horrible happened"); } } return true; }