static String reason(FixedBitSet actual, FixedBitSet expected, IndexSearcher indexSearcher)
     throws IOException {
   StringBuilder builder = new StringBuilder();
   builder.append("expected cardinality:").append(expected.cardinality()).append('\n');
   DocIdSetIterator iterator = expected.iterator();
   for (int doc = iterator.nextDoc();
       doc != DocIdSetIterator.NO_MORE_DOCS;
       doc = iterator.nextDoc()) {
     builder
         .append("Expected doc[")
         .append(doc)
         .append("] with id value ")
         .append(indexSearcher.doc(doc).get(UidFieldMapper.NAME))
         .append('\n');
   }
   builder.append("actual cardinality: ").append(actual.cardinality()).append('\n');
   iterator = actual.iterator();
   for (int doc = iterator.nextDoc();
       doc != DocIdSetIterator.NO_MORE_DOCS;
       doc = iterator.nextDoc()) {
     builder
         .append("Actual doc[")
         .append(doc)
         .append("] with id value ")
         .append(indexSearcher.doc(doc).get(UidFieldMapper.NAME))
         .append('\n');
   }
   return builder.toString();
 }
 @Override
 public int advance(int target) throws IOException {
   doc = _innerIter.advance(target);
   if (doc != NO_MORE_DOCS) {
     if (!reader.isDeleted(doc)) {
       return doc;
     } else {
       while ((doc = _innerIter.nextDoc()) != NO_MORE_DOCS) {
         if (!reader.isDeleted(doc)) {
           return doc;
         }
       }
       return doc;
     }
   }
   return doc;
 }
 @Override
 public int nextDoc() throws IOException {
   while ((doc = _innerIter.nextDoc()) != NO_MORE_DOCS) {
     if (!reader.isDeleted(doc)) {
       return doc;
     }
   }
   return doc;
 }
Пример #4
0
  // inherit javadoc
  public void search(Weight weight, Filter filter, final HitCollector results) throws IOException {

    Scorer scorer = weight.scorer(reader);
    if (scorer == null) return;

    if (filter == null) {
      scorer.score(results);
      return;
    }
    DocIdSetIterator filterDocIdIterator =
        filter.getDocIdSet(reader).iterator(); // CHECKME: use ConjunctionScorer here?

    boolean more = filterDocIdIterator.next() && scorer.skipTo(filterDocIdIterator.doc());

    while (more) {
      int filterDocId = filterDocIdIterator.doc();
      if (filterDocId > scorer.doc() && !scorer.skipTo(filterDocId)) {
        more = false;
      } else {
        int scorerDocId = scorer.doc();
        if (scorerDocId == filterDocId) { // permitted by filter
          results.collect(scorerDocId, scorer.score());
          more = filterDocIdIterator.next();
        } else {
          more = filterDocIdIterator.skipTo(scorerDocId);
        }
      }
    }
  }
Пример #5
0
 @Override
 public int advance(int target) throws IOException {
   currentChildDoc = childrenIterator.advance(target);
   if (currentChildDoc == DocIdSetIterator.NO_MORE_DOCS) {
     return currentChildDoc;
   }
   BytesReference uid = typeCache.idByDoc(currentChildDoc);
   if (uid == null) {
     return nextDoc();
   }
   currentScore = uidToScore.get(uid);
   if (currentScore == 0) {
     return nextDoc();
   }
   return currentChildDoc;
 }
Пример #6
0
    @Override
    public int nextDoc() throws IOException {
      while (true) {
        currentChildDoc = childrenIterator.nextDoc();
        if (currentChildDoc == DocIdSetIterator.NO_MORE_DOCS) {
          return currentChildDoc;
        }

        BytesReference uid = typeCache.parentIdByDoc(currentChildDoc);
        if (uid == null) {
          continue;
        }
        currentScore = uidToScore.get(uid);
        if (currentScore != 0) {
          return currentChildDoc;
        }
      }
    }
Пример #7
0
      @Override
      public int advance(int target) throws IOException {
        if (remaining == 0) {
          return currentDocId = NO_MORE_DOCS;
        }

        currentDocId = parentsIterator.advance(target);
        if (currentDocId == DocIdSetIterator.NO_MORE_DOCS) {
          return currentDocId;
        }

        HashedBytesArray uid = idTypeCache.idByDoc(currentDocId);
        if (uidToScore.containsKey(uid)) {
          // Can use lget b/c uidToScore is only used by one thread at the time (via CacheRecycler)
          currentScore = uidToScore.lget();
          remaining--;
          return currentDocId;
        } else {
          return nextDoc();
        }
      }
Пример #8
0
      @Override
      public int advance(int target) throws IOException {
        if (remaining == 0) {
          return currentDocId = NO_MORE_DOCS;
        }

        currentDocId = parentsIterator.advance(target);
        if (currentDocId == DocIdSetIterator.NO_MORE_DOCS) {
          return currentDocId;
        }

        bytesValues.setDocument(currentDocId);
        long index = parentIds.find(bytesValues.nextValue(), bytesValues.currentValueHash());
        if (index != -1) {
          currentScore = scores.get(index);
          remaining--;
          return currentDocId;
        } else {
          return nextDoc();
        }
      }
 @Override
 public long cost() {
   return docIdSetIterator.cost();
 }
 @Override
 public int advance(int target) throws IOException {
   return docIdSetIterator.advance(target);
 }
 @Override
 public float score() throws IOException {
   assert docIdSetIterator.docID() != NO_MORE_DOCS;
   return theScore;
 }
 @Override
 public int docID() {
   return docIdSetIterator.docID();
 }
 @Override
 public int nextDoc() throws IOException {
   return docIdSetIterator.nextDoc();
 }
Пример #14
0
 @Override
 public long cost() {
   return parentsIterator.cost();
 }
Пример #15
0
 @Override
 public DocIdSetIterator iterator() {
   return DocIdSetIterator.empty();
 }
Пример #16
0
 @Override
 public long cost() {
   return childrenIterator.cost();
 }
Пример #17
0
 public boolean next() throws IOException {
   return docIdSetIterator.next();
 }
Пример #18
0
  public void testFilteredDocIdSet() throws Exception {
    final int maxdoc = 10;
    final DocIdSet innerSet =
        new DocIdSet() {

          @Override
          public long ramBytesUsed() {
            return 0L;
          }

          @Override
          public DocIdSetIterator iterator() {
            return new DocIdSetIterator() {

              int docid = -1;

              @Override
              public int docID() {
                return docid;
              }

              @Override
              public int nextDoc() {
                docid++;
                return docid < maxdoc ? docid : (docid = NO_MORE_DOCS);
              }

              @Override
              public int advance(int target) throws IOException {
                return slowAdvance(target);
              }

              @Override
              public long cost() {
                return 1;
              }
            };
          }
        };

    DocIdSet filteredSet =
        new FilteredDocIdSet(innerSet) {
          @Override
          protected boolean match(int docid) {
            return docid % 2 == 0; // validate only even docids
          }
        };

    DocIdSetIterator iter = filteredSet.iterator();
    ArrayList<Integer> list = new ArrayList<>();
    int doc = iter.advance(3);
    if (doc != DocIdSetIterator.NO_MORE_DOCS) {
      list.add(Integer.valueOf(doc));
      while ((doc = iter.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
        list.add(Integer.valueOf(doc));
      }
    }

    int[] docs = new int[list.size()];
    int c = 0;
    Iterator<Integer> intIter = list.iterator();
    while (intIter.hasNext()) {
      docs[c++] = intIter.next().intValue();
    }
    int[] answer = new int[] {4, 6, 8};
    boolean same = Arrays.equals(answer, docs);
    if (!same) {
      System.out.println("answer: " + Arrays.toString(answer));
      System.out.println("gotten: " + Arrays.toString(docs));
      fail();
    }
  }
Пример #19
0
 public boolean skipTo(int target) throws IOException {
   return docIdSetIterator.skipTo(target);
 }
Пример #20
0
 public int doc() {
   return docIdSetIterator.doc();
 }