2013-06-28 25 views
5

Ho un codice come questo con Lucene. Qualcuno può fornire un esempio o dei suggerimenti su come effettuare l'impaginazione con Lucene?Impaginazione lucenica con TopScoreDocCollector

Query q = queryParser.parse(useQuery); 
TopScoreDocCollector collector = TopScoreDocCollector.create(maxReturn, true); 
searcher.search(q, collector); 

Grazie.

+0

controllo la risposta approvato in questo post: [Lucene 4 Numerazione] [1] [1]: http://stackoverflow.com/a/24533377/1080485 –

risposta

2

È possibile ottenere i TopDocs che rappresentano una particolare pagina di risultati utilizzando TopDocsCollector.topDocs(int). Si ricorda che l'argomento start rappresenta il numero di documenti in esso dovrebbe iniziare, non quanti "pagine", quindi qualcosa come:

TopDocs hits = collector.topDocs(maxReturn*page); 

è di solito appropriato (dove page è numerato da 0)

+1

Come faccio a combinare questo con un oggetto 'sort'? Mi piacerebbe ordinare e quindi estrarre una fetta da quello. –

+1

@ Michael-O Non lo fai. L'utilizzo di un 'TopScoreDocCollector' con un' Sort' non ha senso. 'TopScoreDocCollector' ordina in modo esplicito dal punteggio più alto. Se preferisci utilizzare un raccoglitore, usa invece ['TopFieldCollector'] (http://lucene.apache.org/core/4_0/core/org/apache/lucene/search/TopFieldCollector.html). Puoi anche chiamare 'IndexSearcher.search (Query query, int n, Ordinamento ordinamento)' per una prima query, quindi per le pagine successive, chiama 'IndexSearcher.searchAfter (ScoreDoc dopo, Query query, int n, Ordina ordinamento)' , passando l'ultimo risultato restituito come argomento "dopo". – femtoRgon

+0

OK, grazie. Io già uso il menzionato metodo 'search', ma' searchAfter' non sarà di aiuto perché li espongo con un'API REST e non ho il documento 'dopo' su una chiamata successiva. Avrei bisogno di qualcosa come 'search (query, from, size, sort)'. Sfortunatamente, 'TopScopeDocC ...', 'TopFieldC ...' non farà 'searchAfter'. L'unica opzione che vedo è ottenere tutti i "ScoreDocs" e implementare manualmente l'impaginazione. –