Example usage for org.apache.lucene.search DocIdSetIterator nextDoc

List of usage examples for org.apache.lucene.search DocIdSetIterator nextDoc

Introduction

In this page you can find the example usage for org.apache.lucene.search DocIdSetIterator nextDoc.

Prototype

public abstract int nextDoc() throws IOException;

Source Link

Document

Advances to the next document in the set and returns the doc it is currently on, or #NO_MORE_DOCS if there are no more docs in the set.
NOTE: after the iterator has exhausted you should not call this method, as it may result in unpredicted behavior.

Usage

From source file:lucene.security.search.DocumentVisibilityFilter.java

License:Apache License

public static DocIdSet getLogicalOr(final List<DocIdSet> list) throws IOException {
    if (list.size() == 0) {
        return DocIdSet.EMPTY_DOCIDSET;
    }//w  w  w.  ja v a2 s. co m
    if (list.size() == 1) {
        DocIdSet docIdSet = list.get(0);
        Bits bits = docIdSet.bits();
        if (bits == null) {
            throw new IOException("Bits are not allowed to be null for DocIdSet [" + docIdSet + "].");
        }
        return docIdSet;
    }
    int index = 0;
    final Bits[] bitsArray = new Bits[list.size()];
    int length = -1;
    for (DocIdSet docIdSet : list) {
        Bits bits = docIdSet.bits();
        if (bits == null) {
            throw new IOException("Bits are not allowed to be null for DocIdSet [" + docIdSet + "].");
        }
        bitsArray[index] = bits;
        index++;
        if (length < 0) {
            length = bits.length();
        } else if (length != bits.length()) {
            throw new IOException(
                    "Bits length need to be the same [" + length + "] and [" + bits.length() + "]");
        }
    }
    final int len = length;
    return new DocIdSet() {

        @Override
        public Bits bits() throws IOException {
            return new Bits() {

                @Override
                public boolean get(int index) {
                    for (int i = 0; i < bitsArray.length; i++) {
                        if (bitsArray[i].get(index)) {
                            return true;
                        }
                    }
                    return false;
                }

                @Override
                public int length() {
                    return len;
                }

            };
        }

        @Override
        public boolean isCacheable() {
            return true;
        }

        @Override
        public DocIdSetIterator iterator() throws IOException {
            final DocIdSetIterator[] docIdSetIteratorArray = new DocIdSetIterator[list.size()];
            long c = 0;
            int index = 0;
            for (DocIdSet docIdSet : list) {
                DocIdSetIterator iterator = docIdSet.iterator();
                iterator.nextDoc();
                docIdSetIteratorArray[index] = iterator;
                c += iterator.cost();
                index++;
            }
            final long cost = c;
            return new DocIdSetIterator() {

                private int _docId = -1;

                @Override
                public int advance(int target) throws IOException {
                    callAdvanceOnAllThatAreBehind(target);
                    Arrays.sort(docIdSetIteratorArray, COMPARATOR);
                    DocIdSetIterator iterator = docIdSetIteratorArray[0];
                    return _docId = iterator.docID();
                }

                private void callAdvanceOnAllThatAreBehind(int target) throws IOException {
                    for (int i = 0; i < docIdSetIteratorArray.length; i++) {
                        DocIdSetIterator iterator = docIdSetIteratorArray[i];
                        if (iterator.docID() < target) {
                            iterator.advance(target);
                        }
                    }
                }

                @Override
                public int nextDoc() throws IOException {
                    return advance(_docId + 1);
                }

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

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

            };
        }
    };
}

From source file:lux.functions.Count.java

License:Mozilla Public License

@Override
public UnfailingIterator<Int64Value> iterate(Query query, Evaluator saxon, String[] sortCriteria, int start)
        throws XPathException {
    int count = 0;
    long t = System.currentTimeMillis();
    try {//  w  w  w  .j  ava 2  s  .com
        DocIdSetIterator counter = saxon.getSearcher().search(query);
        while (counter.nextDoc() != Scorer.NO_MORE_DOCS) {
            ++count;
        }
    } catch (IOException e) {
        throw new XPathException(e);
    }
    saxon.getQueryStats().totalTime = System.currentTimeMillis() - t;
    saxon.getQueryStats().docCount += count;
    return SingletonIterator.makeIterator(new Int64Value(count));
}

From source file:lux.functions.Exists.java

License:Mozilla Public License

@Override
public UnfailingIterator<BooleanValue> iterate(Query query, Evaluator saxon, String[] sortCriteria, int start)
        throws XPathException {
    long t = System.currentTimeMillis();
    boolean exists = false;
    try {/*from  w  ww  .j  a  v  a 2 s . c om*/
        DocIdSetIterator iter = saxon.getSearcher().search(query);
        exists = (iter.nextDoc() != Scorer.NO_MORE_DOCS);
    } catch (IOException e) {
        throw new XPathException(e);
    }
    saxon.getQueryStats().totalTime = System.currentTimeMillis() - t;
    if (exists) {
        ++saxon.getQueryStats().docCount;
    }
    return SingletonIterator.makeIterator(BooleanValue.get(exists));
}

From source file:lux.IndexTest.java

License:Mozilla Public License

private void assertPathQuery(IndexTestSupport indexTestSupport) throws ParseException, IOException {
    SrndQuery q = new QueryParser().parse2("w(w({},\"ACT\"),\"SCENE\")");
    Query q2 = q.makeLuceneQueryFieldNoBoost(
            indexTestSupport.indexer.getConfiguration().getFieldName(FieldRole.PATH), new BasicQueryFactory());
    DocIdSetIterator iter = indexTestSupport.searcher.search(q2);
    int count = 0;
    while (iter.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
        ++count;/*from  w  w  w.  j  ava  2 s. c o  m*/
    }
    assertEquals(5, count);
}

From source file:lux.IndexTest.java

License:Mozilla Public License

private void assertFullTextQuery(IndexTestSupport indexTestSupport, String qName, String term,
        int expectedCount) throws IOException, ParserException {
    LuxSearcher searcher = indexTestSupport.searcher;
    XmlIndexer indexer = indexTestSupport.indexer;
    IndexConfiguration config = indexer.getConfiguration();
    FieldDefinition field = config.getField(FieldRole.ELEMENT_TEXT);
    Query q = new XmlQueryParser(field.getName(), field.getAnalyzer()).parse(new ByteArrayInputStream(
            ("<QNameTextQuery fieldName=\"" + config.getFieldName(FieldRole.ELEMENT_TEXT) + "\" qName=\""
                    + qName + "\">" + term + "</QNameTextQuery>").getBytes()));
    DocIdSetIterator iter = searcher.search(q);
    int count = 0;
    while (iter.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
        ++count;//from   w ww  .  java2s.co m
    }
    assertEquals(expectedCount, count);
}

From source file:lux.IndexTest.java

License:Mozilla Public License

private void assertXPathIntField(IndexTestSupport indexTestSupport) throws ParseException, IOException {
    Query q = NumericRangeQuery.newIntRange("nodecount", 6000, 20000, true, true);
    DocIdSetIterator iter = indexTestSupport.searcher.search(q);
    int count = 0;
    while (iter.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
        ++count;// www. ja va  2 s  .co m
    }
    assertEquals(1, count);
}

From source file:lux.IndexTest.java

License:Mozilla Public License

private void assertXPathStringField(int expectedCount, String field, String term,
        IndexTestSupport indexTestSupport) throws ParseException, IOException {
    Query q = new TermQuery(new Term(field, term));
    DocIdSetIterator iter = indexTestSupport.searcher.search(q);
    int count = 0;
    while (iter.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
        ++count;//from www.  j av  a 2  s. c o m
    }
    assertEquals("Wrong number of matches for " + q.toString(), expectedCount, count);
}

From source file:lux.IndexTest.java

License:Mozilla Public License

private void assertTotalDocs() throws IOException {
    LuxSearcher searcher = new LuxSearcher(dir);
    DocIdSetIterator results = searcher.search(new MatchAllDocsQuery());
    int count = 0;
    while (results.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
        ++count;//from   ww w .  ja  va 2 s  .com
    }
    assertEquals(6641, count);
    /*
    */
    searcher.close();
}

From source file:org.apache.blur.filter.IndexFileBitSet.java

License:Apache License

public void create(DocIdSetIterator it) throws IOException {
    String fileName = getFileName();
    if (_directory.fileExists(getFileName())) {
        LOG.warn("Filter [{0}] in directory [{1}] being recreated due to incorrect size.", fileName,
                _directory);//w w  w  .  ja  v  a  2 s . c om
        _directory.deleteFile(fileName);
    }
    IndexOutput output = _directory.createOutput(fileName, IOContext.READ);
    int index;
    int currentWordNum = 0;
    long wordValue = 0;
    while ((index = it.nextDoc()) < _numBits) {
        int wordNum = index >> 6; // div 64
        if (currentWordNum > wordNum) {
            throw new IOException("We got a problem here!");
        }
        while (currentWordNum < wordNum) {
            output.writeLong(wordValue);
            currentWordNum++;
            wordValue = 0;
        }
        int bit = index & 0x3f; // mod 64
        long bitmask = 1L << bit;
        wordValue |= bitmask;
    }
    if (_numBits > 0) {
        int totalWords = (_numBits / 64) + 1;
        while (currentWordNum < totalWords) {
            output.writeLong(wordValue);
            currentWordNum++;
            wordValue = 0;
        }
    }
    output.close();
}

From source file:org.apache.blur.filter.IndexFileBitSetTest.java

License:Apache License

private void checkEquals(DocIdSetIterator expected, DocIdSetIterator actual, int numBits) throws IOException {
    int expectedNextDoc;
    while ((expectedNextDoc = expected.nextDoc()) < numBits) {
        int actualNextDoc = actual.nextDoc();
        assertEquals(expectedNextDoc, actualNextDoc);
    }/*from   ww  w. j a va 2s .c  o m*/
}