You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by Bryan Bende <bb...@apache.org> on 2017/09/02 15:22:10 UTC

Pagination Question

Hello,

I'm trying to implement standard pagination with sorting and faceting, and I have some
code like the following:

// Convert user supplied sorts to Lucene Sort, or use Sort.RELEVANCE if none provided
Sort sort = ...;
      
FacetsCollector facetsCollector = new FacetsCollector();

TopFieldCollector topFieldCollector = TopFieldCollector.create(
        sort, maxSearchResults, false, false, false);

Collector collector = MultiCollector.wrap(topFieldCollector, facetsCollector);

searcher.search(query, collector);

int start = ...
int howMany = ...;

for (ScoreDoc scoreDoc : topFieldCollector.topDocs(start, howMany).scoreDocs) {
    Document doc = ... // read & process doc
}

My understanding is that we can set maxSearchResults to something 
like # of max pages * # of results per page, and on every request for next page we 
are re-computing the full set of matching docs, but then only loading the results from 
start to start + howMany.

Question #1

Lets say we are sorting on a field create_date in ascending order, and there are 1,000 
documents that match the query, and maxSearchResults is set to 100...

Is the first result guaranteed to be the earliest create_date out of all 1,000 matching 
documents, or is it only the earliest out of the first 100 that were found?

Question #2

I was originally attempting to use the searchAfter approach keeping track of the last 
doc from the previous page. This seems like it would be more efficient, but I was kind 
of stuck on how to have a client send back the last doc. 

For example, with a REST API, how would you have the client send something back to 
the server that could be turned back into a FieldDoc to submit for the next page?

I imagine Solr is doing something like this under the hood with the cursorMark feature,
but I'm not familiar with how that relates to searchAfter.

Any thoughts are appreciated.

Thank you,

Bryan



---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org