Refine search
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; }
TopFieldCollector collector = TopFieldCollector.create(sort, topN, true, true, true, true); leafCollector = collector.getLeafCollector(readerContext); leafCollector.setScorer(fakeScorer); docBase = readerContext.docBase; return collector.topDocs();
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;
private void getHits() throws IOException { long time = System.nanoTime(); TopFieldCollector collector = TopFieldCollector.create(sort, numHits, false, true, false, false); searcher.search(query, collector); size = collector.getTotalHits(); offset += scoreDocs.length; scoreDocs = collector.topDocs(offset, numHits).scoreDocs; time = System.nanoTime() - time; final long timeMs = time / 1000000; log.debug("getHits() in {} ms. {}/{}/{}", new Object[] {timeMs, scoreDocs.length, numHits, size}); // double hits for next round numHits *= 2; } }
static TopFieldCollector scoringCollector( Sort sorting, int n ) throws IOException { return TopFieldCollector.create( sorting, n, false, true, false ); }
/** * Search, sorting by {@link Sort}, and computing * drill down and sideways counts. */ public DrillSidewaysResult search(DrillDownQuery query, Query filter, FieldDoc after, int topN, Sort sort, boolean doDocScores, boolean doMaxScore) throws IOException { if (filter != null) { query = new DrillDownQuery(config, filter, query); } if (sort != null) { int limit = searcher.getIndexReader().maxDoc(); if (limit == 0) { limit = 1; // the collector does not alow numHits = 0 } topN = Math.min(topN, limit); final TopFieldCollector hitCollector = TopFieldCollector.create(sort, topN, after, true, doDocScores, doMaxScore); DrillSidewaysResult r = search(query, hitCollector); return new DrillSidewaysResult(r.facets, hitCollector.topDocs()); } else { return search(after, query, topN); } }
@Override public TopFieldDocs reduce(Collection<TopFieldCollector> collectors) throws IOException { final TopFieldDocs[] topDocs = new TopFieldDocs[collectors.size()]; int i = 0; for (TopFieldCollector collector : collectors) { topDocs[i++] = collector.topDocs(); } return TopDocs.merge(rewrittenSort, 0, cappedNumHits, topDocs, true); }
private void getHits() throws IOException { long time = System.nanoTime(); TopFieldCollector collector = TopFieldCollector.create(sort, numHits, false, true, false, false); searcher.search(query, collector); size = collector.getTotalHits(); offset += scoreDocs.length; scoreDocs = collector.topDocs(offset, numHits).scoreDocs; time = System.nanoTime() - time; final long timeMs = time / 1000000; log.debug("getHits() in {} ms. {}/{}/{}", new Object[] {timeMs, scoreDocs.length, numHits, size}); // double hits for next round numHits *= 2; } }
@Override public TopFieldCollector newCollector() throws IOException { final boolean fillFields = true; // TODO: don't pay the price for accurate hit counts by default return TopFieldCollector.create(rewrittenSort, cappedNumHits, after, fillFields, doDocScores, doMaxScore, true); }
private TopDocs toTopDocs( Query query, QueryContext context, IndexSearcher searcher ) throws IOException { Sort sorting = context != null ? context.getSorting() : null; TopDocs topDocs; if ( sorting == null && context != null ) { topDocs = searcher.search( query, context.getTop() ); } else { if ( context == null || !context.getTradeCorrectnessForSpeed() ) { TopFieldCollector collector = LuceneDataSource.scoringCollector( sorting, context.getTop() ); searcher.search( query, collector ); topDocs = collector.topDocs(); } else { topDocs = searcher.search( query, null, context.getTop(), sorting ); } } return topDocs; }
private static TopDocsCollector<?> createTopDocsCollector(Sort sort, int maxDocs) { TopDocsCollector<?> topDocsCollector; if ( sort == null ) { topDocsCollector = TopScoreDocCollector.create( maxDocs ); } else { topDocsCollector = TopFieldCollector.create( sort, maxDocs, true, true, true, true ); } return topDocsCollector; } }
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; }
private void getHits() throws IOException { TopFieldCollector collector = TopFieldCollector.create(sort, numHits, false, true, false, false); searcher.search(query, collector); this.size = collector.getTotalHits(); ScoreDoc[] docs = collector.topDocs().scoreDocs; for (int i = scoreDocs.size(); i < docs.length; i++) { scoreDocs.add(docs[i]); } log.debug("getHits() {}/{}", scoreDocs.size(), numHits); // double hits for next round numHits *= 2; } }
return create(sort, numHits, null, fillFields, trackDocScores, trackMaxScore, trackTotalHits);
int start = (pageNum < 1 || pageNum > Config.MAX_PAGES) ? 0 : (pageNum - 1) * maxPerPage; Sort sort = new Sort(getSortFieldForQuery(type, pager)); TopFieldCollector collector = TopFieldCollector.create(sort, DEFAULT_LIMIT, true, false, false, false); isearcher.search(query, collector); topDocs = collector.topDocs(start, maxPerPage);
TopFieldCollector collector = TopFieldCollector.create(sort, topN, true, true, true); leafCollector = collector.getLeafCollector(readerContext); leafCollector.setScorer(fakeScorer); docBase = readerContext.docBase; return collector.topDocs();
@Override public TopFieldDocs reduce(Collection<TopFieldCollector> collectors) throws IOException { final TopFieldDocs[] topFieldDocs = new TopFieldDocs[collectors.size()]; int pos = 0; for (TopFieldCollector collector : collectors) topFieldDocs[pos++] = collector.topDocs(); return TopDocs.merge(sort, topN, topFieldDocs); }
TopDocsReducer(Sort withinGroupSort, int maxDocsPerGroup, boolean getScores, boolean getMaxScores, boolean fillSortFields) { this.needsScores = getScores || getMaxScores || withinGroupSort.needsScores(); this.supplier = withinGroupSort == Sort.RELEVANCE ? () -> TopScoreDocCollector.create(maxDocsPerGroup) : () -> TopFieldCollector.create(withinGroupSort, maxDocsPerGroup, fillSortFields, getScores, getMaxScores, true); // TODO: disable exact counts? }