Example usage for org.apache.lucene.search IndexSearcher searchAfter

List of usage examples for org.apache.lucene.search IndexSearcher searchAfter

Introduction

In this page you can find the example usage for org.apache.lucene.search IndexSearcher searchAfter.

Prototype

public TopDocs searchAfter(ScoreDoc after, Query query, int n, Sort sort) throws IOException 

Source Link

Document

Finds the top n hits for query where all results are after a previous result (after).

Usage

From source file:io.puntanegra.fhir.index.lucene.LuceneDocumentIterator.java

License:Apache License

private void fetch() {
    try {//  w  ww.  java  2s  .  c  o  m
        IndexSearcher searcher = manager.acquire();

        try {

            TimeCounter time = TimeCounter.create().start();

            // Search for top documents
            TopDocs topDocs = null;
            if (this.sort != null) {
                sort = sort.rewrite(searcher);
                topDocs = searcher.searchAfter(after, query, page, sort);
            } else {
                topDocs = searcher.searchAfter(after, query, page);
            }
            ScoreDoc[] scoreDocs = topDocs.scoreDocs;

            // Check inf mayHaveMore
            mayHaveMore = scoreDocs.length == page;

            // Collect the documents from query result
            for (ScoreDoc scoreDoc : scoreDocs) {
                Document document = searcher.doc(scoreDoc.doc, fields);
                documents.add(Pair.create(document, scoreDoc));
                after = scoreDoc;
            }

            logger.debug("Get page with {} documents in {}", scoreDocs.length, time.stop());

        } finally {
            manager.release(searcher);
        }

    } catch (Exception e) {
        e.printStackTrace();
        throw new FhirIndexException(e, "Error searching in with %s and %s", query, sort);
    }
}

From source file:org.bidtime.lucene.ldbc.rs.QueryRunnerEx.java

License:Apache License

public static TopDocs getTopDocs(IndexSearcher searcher, Query query, Integer pageIdx, Integer pageSize,
        Sort sort) throws Exception {
    /*// w  ww.j  a v a  2  s  .  c o m
     * TopScoreDocCollector topCollector = TopScoreDocCollector.create( 100,
     * false); searcher.search(query, topCollector);
     * System.out.println("" + topCollector.getTotalHits()); // 
     * ScoreDoc[] docs = topCollector.topDocs((pageNO - 1) * pageSize,
     * pageSize).scoreDocs;
     */
    TopDocs topDocs = null;
    if (pageSize != null) {
        if (pageIdx == 0) {
            if (sort != null) {
                topDocs = searcher.search(query, Integer.MAX_VALUE, sort);
            } else {
                topDocs = searcher.search(query, Integer.MAX_VALUE);
            }
        } else {
            int rows = pageSize * pageIdx;
            TopDocs tds = searcher.search(query, rows);
            if (tds.totalHits > rows) {
                ScoreDoc scoreDoc = tds.totalHits < rows ? tds.scoreDocs[tds.totalHits] : tds.scoreDocs[rows];
                if (sort != null) {
                    topDocs = searcher.searchAfter(scoreDoc, query, pageSize, sort);
                } else {
                    topDocs = searcher.searchAfter(scoreDoc, query, pageSize);
                }
            } else {
                topDocs = tds;
            }
        }
    } else {
        if (sort != null) {
            topDocs = searcher.search(query, Integer.MAX_VALUE, sort);
        } else {
            topDocs = searcher.search(query, Integer.MAX_VALUE);
        }
    }
    return topDocs;
}

From source file:uk.gov.nationalarchives.discovery.taxonomy.common.repository.lucene.IAViewRepository.java

License:Mozilla Public License

/**
 * Finds the top n hits from whole Index where all results are after a
 * previous result (after)//w  ww .  j  a va  2  s  . c om
 * 
 * @param after
 *            the last doc from previous search
 * @param nDocs
 *            nb of elements to retrieve in total
 * @return
 */
public BrowseAllDocsResponse browseAllDocs(ScoreDoc after, int nDocs) {
    List<String> listOfDocReferences = new ArrayList<String>();
    IndexSearcher searcher = null;
    try {
        searcher = iaviewSearcherManager.acquire();

        TopDocs topDocs = searcher.searchAfter(after, new MatchAllDocsQuery(), nDocs,
                new Sort(new SortField(null, Type.DOC)));
        ScoreDoc scoreDoc = null;
        for (int i = 0; i < topDocs.scoreDocs.length; i++) {
            scoreDoc = topDocs.scoreDocs[i];
            Document document = searcher.doc(scoreDoc.doc,
                    new HashSet<String>(Arrays.asList(InformationAssetViewFields.DOCREFERENCE.toString())));
            String docReferenceFromLuceneDocument = LuceneTaxonomyMapper
                    .getDocReferenceFromLuceneDocument(document);

            listOfDocReferences.add(docReferenceFromLuceneDocument);
        }
        return new BrowseAllDocsResponse(listOfDocReferences, scoreDoc);

    } catch (IOException ioException) {
        throw new TaxonomyException(TaxonomyErrorType.LUCENE_IO_EXCEPTION, ioException);
    } finally {
        LuceneHelperTools.releaseSearcherManagerQuietly(iaviewSearcherManager, searcher);
    }
}