Esempio n. 1
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;
 }
 @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;
 }
Esempio n. 3
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();
        }
      }
Esempio n. 4
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();
        }
      }
 @Override
 public int advance(int target) throws IOException {
   return docIdSetIterator.advance(target);
 }
Esempio n. 6
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();
    }
  }