Beispiel #1
0
  public void doFilterTest(SolrIndexReader reader) throws IOException {
    OpenBitSet bs = getRandomSet(reader.maxDoc(), rand.nextInt(reader.maxDoc() + 1));
    DocSet a = new BitDocSet(bs);
    DocSet b = getIntDocSet(bs);

    Filter fa = a.getTopFilter();
    Filter fb = b.getTopFilter();

    // test top-level
    DocIdSet da = fa.getDocIdSet(reader);
    DocIdSet db = fb.getDocIdSet(reader);
    doTestIteratorEqual(da, db);

    // first test in-sequence sub readers
    for (SolrIndexReader sir : reader.getLeafReaders()) {
      da = fa.getDocIdSet(sir);
      db = fb.getDocIdSet(sir);
      doTestIteratorEqual(da, db);
    }

    int nReaders = reader.getLeafReaders().length;
    // now test out-of-sequence sub readers
    for (int i = 0; i < nReaders; i++) {
      SolrIndexReader sir = reader.getLeafReaders()[rand.nextInt(nReaders)];
      da = fa.getDocIdSet(sir);
      db = fb.getDocIdSet(sir);
      doTestIteratorEqual(da, db);
    }
  }
Beispiel #2
0
  protected void doSingle(int maxSize) {
    int sz = rand.nextInt(maxSize + 1);
    int sz2 = rand.nextInt(maxSize);
    OpenBitSet bs1 = getRandomSet(sz, rand.nextInt(sz + 1));
    OpenBitSet bs2 = getRandomSet(sz, rand.nextInt(sz2 + 1));

    DocSet a1 = new BitDocSet(bs1);
    DocSet a2 = new BitDocSet(bs2);
    DocSet b1 = getDocSet(bs1);
    DocSet b2 = getDocSet(bs2);

    checkEqual(bs1, b1);
    checkEqual(bs2, b2);

    iter(a1, b1);
    iter(a2, b2);

    OpenBitSet a_and = (OpenBitSet) bs1.clone();
    a_and.and(bs2);
    OpenBitSet a_or = (OpenBitSet) bs1.clone();
    a_or.or(bs2);
    // OpenBitSet a_xor = (OpenBitSet)bs1.clone(); a_xor.xor(bs2);
    OpenBitSet a_andn = (OpenBitSet) bs1.clone();
    a_andn.andNot(bs2);

    checkEqual(a_and, b1.intersection(b2));
    checkEqual(a_or, b1.union(b2));
    checkEqual(a_andn, b1.andNot(b2));

    assertEquals(a_and.cardinality(), b1.intersectionSize(b2));
    assertEquals(a_or.cardinality(), b1.unionSize(b2));
    assertEquals(a_andn.cardinality(), b1.andNotSize(b2));
  }
  /**
   * Iterates DocSets to test for equality - slow and for testing purposes only.
   *
   * @lucene.internal
   */
  public static boolean equals(DocSet a, DocSet b) {
    DocIterator iter1 = a.iterator();
    DocIterator iter2 = b.iterator();

    for (; ; ) {
      boolean n1 = iter1.hasNext();
      boolean n2 = iter2.hasNext();
      if (n1 != n2) {
        return false;
      }
      if (!n1) return true; // made it to end
      int d1 = iter1.nextDoc();
      int d2 = iter2.nextDoc();
      if (d1 != d2) {
        return false;
      }
    }
  }
Beispiel #4
0
  public void iter(DocSet d1, DocSet d2) {
    // HashDocSet and DocList doesn't iterate in order.
    if (d1 instanceof HashDocSet
        || d2 instanceof HashDocSet
        || d1 instanceof DocList
        || d2 instanceof DocList) return;

    DocIterator i1 = d1.iterator();
    DocIterator i2 = d2.iterator();

    assert (i1.hasNext() == i2.hasNext());

    for (; ; ) {
      boolean b1 = i1.hasNext();
      boolean b2 = i2.hasNext();
      assertEquals(b1, b2);
      if (!b1) break;
      assertEquals(i1.nextDoc(), i2.nextDoc());
    }
  }
  int doSetGen(int iter, Query q) throws Exception {
    SolrQueryRequest req = lrf.makeRequest();

    SolrIndexSearcher searcher = req.getSearcher();

    long start = System.currentTimeMillis();

    int ret = 0;
    for (int i = 0; i < iter; i++) {
      DocSet set = searcher.getDocSetNC(q, null);
      ret += set.size();
    }

    long end = System.currentTimeMillis();
    System.out.println(
        "ret=" + ret + " time=" + (end - start) + " throughput=" + iter * 1000 / (end - start + 1));

    req.close();
    assertTrue(ret > 0); // make sure we did some work
    return ret;
  }
  // implementers of DocSetProducer should not call this with themselves or it will result in an
  // infinite loop
  public static DocSet createDocSet(SolrIndexSearcher searcher, Query query, DocSet filter)
      throws IOException {

    if (filter != null) {
      Filter luceneFilter = filter.getTopFilter();
      query =
          new BooleanQuery.Builder()
              .add(query, BooleanClause.Occur.MUST)
              .add(luceneFilter, BooleanClause.Occur.FILTER)
              .build();
    }

    if (query instanceof TermQuery) {
      DocSet set = createDocSet(searcher, ((TermQuery) query).getTerm());
      // assert equals(set, createDocSetGeneric(searcher, query));
      return set;
    } else if (query instanceof DocSetProducer) {
      DocSet set = ((DocSetProducer) query).createDocSet(searcher);
      // assert equals(set, createDocSetGeneric(searcher, query));
      return set;
    }

    return createDocSetGeneric(searcher, query);
  }
Beispiel #7
0
 public void checkEqual(OpenBitSet bs, DocSet set) {
   for (int i = 0; i < bs.capacity(); i++) {
     assertEquals(bs.get(i), set.exists(i));
   }
   assertEquals(bs.cardinality(), set.size());
 }