Hi,
How about code below? Would be a contrib?
public class PaggedTopDocs
{
private TopDocs hits;
public PaggedTopDocs(Searcher searcher, Query query, int
currentPage, int documentsPerPage)
{
this.CurrentPage = currentPage;
this.DocumentsPerPage = documentsPerPage;
hits = searcher.Search(query, documentsPerPage * currentPage);
}
public int CurrentPage { get; private set; }
public int DocumentsPerPage { get; private set; }
public int Total
{
get { return hits.totalHits; }
}
public int Pages
{
get { return (int)Math.Ceiling((double)hits.totalHits /
(double)DocumentsPerPage); }
}
public bool HasPreview
{
get { return (CurrentPage > 1); }
}
public bool HasNext
{
get { return (CurrentPage < Pages); }
}
public ScoreDoc[] GetDocuments()
{
List<ScoreDoc> docs = new List<ScoreDoc>(this.DocumentsPerPage);
int start = (DocumentsPerPage * CurrentPage) - DocumentsPerPage;
int end = (DocumentsPerPage * CurrentPage) > Total ? Total :
(DocumentsPerPage * CurrentPage);
for (int i = start; i < end; i++)
{
docs.Add(hits.scoreDocs[i]);
}
return docs.ToArray();
}
}
Regards,
Leo