Refine search
/** * Search one index. This is used if no projects are set up. * @param paging whether to use paging (if yes, first X pages will load * faster) * @param root which db to search * @throws IOException */ private void searchSingleDatabase(File root, boolean paging) throws IOException { IndexReader ireader = DirectoryReader.open(FSDirectory.open(root.toPath())); searcher = new IndexSearcher(ireader); collector = TopScoreDocCollector.create(hitsPerPage * cachePages); searcher.search(query, collector); totalHits = collector.getTotalHits(); if (!paging && totalHits > 0) { collector = TopScoreDocCollector.create(totalHits); searcher.search(query, collector); } hits = collector.topDocs().scoreDocs; for (ScoreDoc hit : hits) { int docId = hit.doc; Document d = searcher.doc(docId); docs.add(d); } }
private TopDocs getTopDocs( Sort sort, int size ) throws IOException { TopDocs topDocs; if ( sort == Sort.RELEVANCE ) { TopScoreDocCollector collector = TopScoreDocCollector.create( size ); replayTo( collector ); topDocs = collector.topDocs(); } else { TopFieldCollector collector = TopFieldCollector.create( sort, size, false, true, false ); replayTo( collector ); topDocs = collector.topDocs(); } return topDocs; }
final TopScoreDocCollector hits = TopScoreDocCollector.create( topHitCount ); indexSearcher.search( query, hits ); TopScoreDocCollector hits = TopScoreDocCollector.create( topHitCount ); indexSearcher.search( query, hits ); if ( topHitCount < hits.getTotalHits() ) topHitCount = hits.getTotalHits(); hits = TopScoreDocCollector.create( topHitCount ); indexSearcher.search( query, hits );
IndexSearcher searcher = new IndexSearcher(directory); QueryParser parser = new QueryParser(Version.LUCENE_30, "content", analyzer); Query query = parser.parse("terms to search"); TopScoreDocCollector collector = TopScoreDocCollector.create(HOW_MANY_RESULTS_TO_COLLECT, true); searcher.search(query, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; // `i` is just a number of document in Lucene. Note, that this number may change after document deletion for (int i = 0; i < hits.length; i++) { Document hitDoc = searcher.doc(hits[i].doc); // getting actual document System.out.println("Title: " + hitDoc.get("title")); System.out.println("Content: " + hitDoc.get("content")); System.out.println(); }
private static TopDocs doSearch(IndexSearcher searcher, ScoreDoc after, Query q, int n, Sort sort, boolean doDocScores, boolean doMaxScore, Collector fc) throws IOException { int limit = searcher.getIndexReader().maxDoc(); if (limit == 0) { limit = 1; hitsCollector = TopFieldCollector.create(sort, n, (FieldDoc) after, fillFields, doMaxScore); } else { hitsCollector = TopScoreDocCollector.create(n, after); searcher.search(q, MultiCollector.wrap(hitsCollector, fc)); return hitsCollector.topDocs();
IndexReader[] indexes, XWikiContext context) throws IOException, ParseException IndexSearcher searcher = new IndexSearcher(new MultiReader(indexes, true)); results = TopFieldCollector.create(sort, 1000, true, true, false, false); } else { results = TopScoreDocCollector.create(1000, false); searcher.search(q, results); LOGGER.debug("query [{}] returned {} hits", q, results.getTotalHits());
if ( collector.getTotalHits() == 0 ) ScoreDoc[] scoreDocs = collector.topDocs().scoreDocs; hitCount += collector.getTotalHits(); Document doc = indexSearcher.doc( scoreDocs[i].doc );
this.sortAndFormats = sortAndFormats; if (sortAndFormats == null) { final TopDocsCollector<?> topDocsCollector = TopScoreDocCollector.create(numHits, searchAfter); this.collector = topDocsCollector; this.topDocsSupplier = topDocsCollector::topDocs; final TopDocsCollector<?> topDocsCollector = TopFieldCollector.create(sortAndFormats.sort, numHits, (FieldDoc) searchAfter, true, trackMaxScore, trackMaxScore, false); this.topDocsSupplier = topDocsCollector::topDocs;
... DirectoryReader reader = DirectoryReader.open(MMapDirectory.open( java.io.File(indexFile) ); IndexSearcher searcher = new IndexSearcher(reader); TopScoreDocCollector collector = TopScoreDocCollector.create(MAX_RESULTS, true); // MAX_RESULTS is just an int limiting the total number of hits int startIndex = (page -1) * hitsPerPage; // our page is 1 based - so we need to convert to zero based Query query = new QueryParser(Version.LUCENE_48, "All", analyzer).parse(searchQuery); searcher.search(query, collector); TopDocs hits = collector.topDocs(startIndex, hitsPerPage); ...
private int doSearch(String searchPhrase, int maxNumberOfHits, Version luceneVersion) throws NullPointerException, ParseException, IOException { LOG.trace("*** Search Phrase: {} ***", searchPhrase); QueryParser parser = new QueryParser("contents", analyzer); Query query = parser.parse(searchPhrase); TopScoreDocCollector collector = TopScoreDocCollector.create(maxNumberOfHits); indexSearcher.search(query, collector); hits = collector.topDocs().scoreDocs; LOG.trace("*** Search generated {} hits ***", hits.length); return hits.length; } }
/** * Search, sorting by score, and computing * drill down and sideways counts. */ public DrillSidewaysResult search(ScoreDoc after, DrillDownQuery query, int topN) throws IOException { int limit = searcher.getIndexReader().maxDoc(); if (limit == 0) { limit = 1; // the collector does not alow numHits = 0 } topN = Math.min(topN, limit); TopScoreDocCollector hitCollector = TopScoreDocCollector.create(topN, after); DrillSidewaysResult r = search(query, hitCollector); return new DrillSidewaysResult(r.facets, hitCollector.topDocs()); }
@Override public TopScoreDocCollector newCollector() throws IOException { return TopScoreDocCollector.create(cappedNumHits, after); }
@Override public TopDocs reduce(Collection<TopScoreDocCollector> collectors) throws IOException { final TopDocs[] topDocs = new TopDocs[collectors.size()]; int i = 0; for (TopScoreDocCollector collector : collectors) { topDocs[i++] = collector.topDocs(); } return TopDocs.merge(0, cappedNumHits, topDocs, true); }
public ScoreDoc[] findScoreDocs(Query query, int hitsPerPage) { ScoreDoc[] hits = null; long start = System.currentTimeMillis(); try { Searcher searcher = indexSearcher(); TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true); searcher.search(query, collector); hits = collector.topDocs().scoreDocs; log.debug("Returning " + hits.length + " after " + (System.currentTimeMillis() - start) + " ms"); return hits; } catch (IOException e) { throw NSForwardException._runtimeExceptionForThrowable(e); } }
TopScoreDocCollector collector = TopScoreDocCollector.create(10, true); searcher.search(query, collector); TopDocs topDocs = collector.topDocs(); int numResults = collector.getTotalHits();
@Override public int getTotalHits() { return tdc.getTotalHits(); }
final TopScoreDocCollector hits = TopScoreDocCollector.create( topHitCount, true ); indexSearcher.search( query, hits ); TopScoreDocCollector hits = TopScoreDocCollector.create( topHitCount, true ); indexSearcher.search( query, hits ); if ( topHitCount < hits.getTotalHits() ) topHitCount = hits.getTotalHits(); hits = TopScoreDocCollector.create( topHitCount, true ); indexSearcher.search( query, hits );
private static TopDocs doSearch(IndexSearcher searcher, ScoreDoc after, Query q, int n, Sort sort, boolean doDocScores, boolean doMaxScore, Collector fc) throws IOException { int limit = searcher.getIndexReader().maxDoc(); if (limit == 0) { limit = 1; if (n==0) { TotalHitCountCollector totalHitCountCollector = new TotalHitCountCollector(); searcher.search(q, MultiCollector.wrap(totalHitCountCollector, fc)); topDocs = new TopDocs(totalHitCountCollector.getTotalHits(), new ScoreDoc[0], Float.NaN); } else { hitsCollector = TopFieldCollector.create(sort, n, (FieldDoc) after, fillFields, true); // TODO: can we disable exact hit counts } else { hitsCollector = TopScoreDocCollector.create(n, after); searcher.search(q, MultiCollector.wrap(hitsCollector, fc));
if ( collector.getTotalHits() == 0 ) ScoreDoc[] scoreDocs = collector.topDocs().scoreDocs; hitCount += collector.getTotalHits(); Document doc = indexSearcher.doc( scoreDocs[i].doc );