private static DocIdSetIterator approximation(PhraseQuery.PostingsAndFreq[] postings) { List<DocIdSetIterator> iterators = new ArrayList<>(); for (PhraseQuery.PostingsAndFreq posting : postings) { iterators.add(posting.postings); } return ConjunctionDISI.intersectIterators(iterators); }
private static DocIdSetIterator approximation(PhraseQuery.PostingsAndFreq[] postings) { List<DocIdSetIterator> iterators = new ArrayList<>(); for (PhraseQuery.PostingsAndFreq posting : postings) { iterators.add(posting.postings); } return ConjunctionDISI.intersectIterators(iterators); }
/** * Creates custom exact phrase scorer which remembers the positions of the found matches. * @param weight query weight * @param postings postings of the terms * @param offset the offset that is added to the found match position */ public CustomExactPhraseScorer( final Weight weight, final CustomPhraseQuery.PostingsAndFreq[] postings, final int offset ) { super(weight); this.offset = offset; // custom List<DocIdSetIterator> iterators = new ArrayList<>(); List<PostingsAndPosition> postingsAndPositions = new ArrayList<>(); for (CustomPhraseQuery.PostingsAndFreq posting : postings) { iterators.add(posting.postings); postingsAndPositions.add(new PostingsAndPosition(posting.postings, posting.position)); } // custom begins – support for single term if (iterators.size() == 1) { conjunction = iterators.get(0); } else { conjunction = ConjunctionDISI.intersectIterators(iterators); } // custom ends assert TwoPhaseIterator.unwrap(conjunction) == null; this.postings = postingsAndPositions.toArray(new PostingsAndPosition[postingsAndPositions.size()]); }
conjunction = iterators[0]; } else { conjunction = ConjunctionDISI.intersectIterators(Arrays.asList(iterators));
intersection = ConjunctionDISI.intersectIterators(Arrays.asList(numeric, new BitSetIterator(recoverySourceToKeep, recoverySourceToKeep.length())));
DocIdSetIterator iterator = ConjunctionDISI.intersectIterators(Arrays.asList(innerHitQueryScorer.iterator(), scorer.iterator())); for (int docId = iterator.nextDoc(); docId < DocIdSetIterator.NO_MORE_DOCS; docId = iterator.nextDoc()) {
private static DocIdSetIterator approximation(PhraseQuery.PostingsAndFreq[] postings) { List<DocIdSetIterator> iterators = new ArrayList<>(); for (PhraseQuery.PostingsAndFreq posting : postings) { iterators.add(posting.postings); } return ConjunctionDISI.intersectIterators(iterators); }
private static DocIdSetIterator approximation(PhraseQuery.PostingsAndFreq[] postings) { List<DocIdSetIterator> iterators = new ArrayList<>(); for (PhraseQuery.PostingsAndFreq posting : postings) { iterators.add(posting.postings); } return ConjunctionDISI.intersectIterators(iterators); }
ExactPhraseScorer(Weight weight, PhraseQuery.PostingsAndFreq[] postings, Similarity.SimScorer docScorer, boolean needsScores, float matchCost) throws IOException { super(weight); this.docScorer = docScorer; this.needsScores = needsScores; List<DocIdSetIterator> iterators = new ArrayList<>(); List<PostingsAndPosition> postingsAndPositions = new ArrayList<>(); for(PhraseQuery.PostingsAndFreq posting : postings) { iterators.add(posting.postings); postingsAndPositions.add(new PostingsAndPosition(posting.postings, posting.position)); } conjunction = ConjunctionDISI.intersectIterators(iterators); this.postings = postingsAndPositions.toArray(new PostingsAndPosition[postingsAndPositions.size()]); this.matchCost = matchCost; }
ExactPhraseScorer(Weight weight, PhraseQuery.PostingsAndFreq[] postings, Similarity.SimScorer docScorer, boolean needsScores, float matchCost) throws IOException { super(weight); this.docScorer = docScorer; this.needsScores = needsScores; List<DocIdSetIterator> iterators = new ArrayList<>(); List<PostingsAndPosition> postingsAndPositions = new ArrayList<>(); for(PhraseQuery.PostingsAndFreq posting : postings) { iterators.add(posting.postings); postingsAndPositions.add(new PostingsAndPosition(posting.postings, posting.position)); } conjunction = ConjunctionDISI.intersectIterators(iterators); this.postings = postingsAndPositions.toArray(new PostingsAndPosition[postingsAndPositions.size()]); this.matchCost = matchCost; }
SloppyPhraseScorer(Weight weight, PhraseQuery.PostingsAndFreq[] postings, int slop, Similarity.SimScorer docScorer, boolean needsScores, float matchCost) { super(weight); this.docScorer = docScorer; this.needsScores = needsScores; this.slop = slop; this.numPostings = postings==null ? 0 : postings.length; pq = new PhraseQueue(postings.length); DocIdSetIterator[] iterators = new DocIdSetIterator[postings.length]; phrasePositions = new PhrasePositions[postings.length]; for (int i = 0; i < postings.length; ++i) { iterators[i] = postings[i].postings; phrasePositions[i] = new PhrasePositions(postings[i].postings, postings[i].position, i, postings[i].terms); } conjunction = ConjunctionDISI.intersectIterators(Arrays.asList(iterators)); this.matchCost = matchCost; }
SloppyPhraseScorer(Weight weight, PhraseQuery.PostingsAndFreq[] postings, int slop, Similarity.SimScorer docScorer, boolean needsScores, float matchCost) { super(weight); this.docScorer = docScorer; this.needsScores = needsScores; this.slop = slop; this.numPostings = postings==null ? 0 : postings.length; pq = new PhraseQueue(postings.length); DocIdSetIterator[] iterators = new DocIdSetIterator[postings.length]; phrasePositions = new PhrasePositions[postings.length]; for (int i = 0; i < postings.length; ++i) { iterators[i] = postings[i].postings; phrasePositions[i] = new PhrasePositions(postings[i].postings, postings[i].position, i, postings[i].terms); } conjunction = ConjunctionDISI.intersectIterators(Arrays.asList(iterators)); this.matchCost = matchCost; }
private void countOneSegment(NumericDocValues values, MatchingDocs hits) throws IOException { DocIdSetIterator it = ConjunctionDISI.intersectIterators( Arrays.asList(hits.bits.iterator(), values)); for (int doc = it.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = it.nextDoc()) { increment(values.longValue()); totCount++; } }
intersection = ConjunctionDISI.intersectIterators(Arrays.asList(numeric, new BitSetIterator(recoverySourceToKeep, recoverySourceToKeep.length())));
intersection = ConjunctionDISI.intersectIterators(Arrays.asList(numeric, new BitSetIterator(recoverySourceToKeep, recoverySourceToKeep.length())));
private final void count(List<MatchingDocs> matchingDocs) throws IOException { for(MatchingDocs hits : matchingDocs) { BinaryDocValues dv = hits.context.reader().getBinaryDocValues(indexFieldName); if (dv == null) { // this reader does not have DocValues for the requested category list continue; } DocIdSetIterator it = ConjunctionDISI.intersectIterators(Arrays.asList( hits.bits.iterator(), dv)); for (int doc = it.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = it.nextDoc()) { final BytesRef bytesRef = dv.binaryValue(); byte[] bytes = bytesRef.bytes; int end = bytesRef.offset + bytesRef.length; int ord = 0; int offset = bytesRef.offset; int prev = 0; while (offset < end) { byte b = bytes[offset++]; if (b >= 0) { prev = ord = ((ord << 7) | b) + prev; increment(ord); ord = 0; } else { ord = (ord << 7) | (b & 0x7F); } } } } rollup(); }
/** Counts directly from SortedNumericDocValues. */ private void countMultiValued(String field, List<MatchingDocs> matchingDocs) throws IOException { for (MatchingDocs hits : matchingDocs) { SortedNumericDocValues values = hits.context.reader().getSortedNumericDocValues(field); if (values == null) { // this field has no doc values for this segment continue; } NumericDocValues singleValues = DocValues.unwrapSingleton(values); if (singleValues != null) { countOneSegment(singleValues, hits); } else { DocIdSetIterator it = ConjunctionDISI.intersectIterators( Arrays.asList(hits.bits.iterator(), values)); for (int doc = it.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = it.nextDoc()) { int limit = values.docValueCount(); totCount += limit; for (int i = 0; i < limit; i++) { increment(values.nextValue()); } } } } }
DocIdSetIterator iterator = ConjunctionDISI.intersectIterators(Arrays.asList(innerHitQueryScorer.iterator(), scorer.iterator())); for (int docId = iterator.nextDoc(); docId < DocIdSetIterator.NO_MORE_DOCS; docId = iterator.nextDoc()) {
DocIdSetIterator iterator = ConjunctionDISI.intersectIterators(Arrays.asList(innerHitQueryScorer.iterator(), scorer.iterator())); for (int docId = iterator.nextDoc(); docId < DocIdSetIterator.NO_MORE_DOCS; docId = iterator.nextDoc()) {
DocIdSetIterator iterator = ConjunctionDISI.intersectIterators(Arrays.asList(innerHitQueryScorer.iterator(), scorer.iterator())); for (int docId = iterator.nextDoc(); docId < DocIdSetIterator.NO_MORE_DOCS; docId = iterator.nextDoc()) {