/** * Lower-level suggest API. Collects completion hits through <code>collector</code> for <code> * query</code>. * * <p>{@link TopSuggestDocsCollector#collect(int, CharSequence, CharSequence, float)} is called * for every matching completion hit. */ public void suggest(CompletionQuery query, TopSuggestDocsCollector collector) throws IOException { // TODO use IndexSearcher.rewrite instead // have to implement equals() and hashCode() in CompletionQuerys and co query = (CompletionQuery) query.rewrite(getIndexReader()); Weight weight = query.createWeight(this, collector.needsScores()); for (LeafReaderContext context : getIndexReader().leaves()) { BulkScorer scorer = weight.bulkScorer(context); if (scorer != null) { try { scorer.score(collector.getLeafCollector(context), context.reader().getLiveDocs()); } catch (CollectionTerminatedException e) { // collection was terminated prematurely // continue with the following leaf } } } }
/** Returns top <code>n</code> completion hits for <code>query</code> */ public TopSuggestDocs suggest(CompletionQuery query, int n) throws IOException { TopSuggestDocsCollector collector = new TopSuggestDocsCollector(n); suggest(query, collector); return collector.get(); }