List of usage examples for org.apache.lucene.search IndexSearcher searchAfter
public TopDocs searchAfter(ScoreDoc after, Query query, int n, Sort sort) throws IOException
n
hits for query
where all results are after a previous result (after
). 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); } }