In our web app, when displaying result lists from solr,  we've successfully 
introduced paging via the params 'start' and 'rows' and it's working quite well.

Our navigation in list screens look like this:

<< First   < Prev   1 - 15 of 62181   Next 
Last >><http://test.litterare.local:3100/littera/libraries/2/cat/man?locale=en>

One can navigate to the first page, previous page, next page and last page. All 
is done via adapting the param "start" accordingly by simply adding the page 

However, now we want to introduce a similar navigation in our detail views, 
where only ever one document is displayed. Again, the navigation bar looks like 

<< First   < Prev   1 - 15 of 62181   Next 
Last >><http://test.litterare.local:3100/littera/libraries/2/cat/man?locale=en>

But now, Prev / Next shall open up the previous / next _document_ instead of 
the next page. The same goes for First and Last, it shall open the first / last 
_document_ not the page.

Our first approach to this was to simply add the param "fl=id" so we only get 
the IDs of documents and set page size to ALL (i.e. no restriction on param 
"rows"). That way, it was easy to extract the current document id from the 
result list, and check which id was preceding and succeeding the current id, as 
well as getting the very first id and the very last id, in order to render the 
navigation bar.

This lead to solr being heavily under load since it must load 62181 documents 
(in this example) in order to return the ids. I somehow thought this would be 
easy for solr to do, but it isn't.

Our second approach was, to simply keep the same value for params "start" and 
"rows" since the user is always selecting a document from the list - thus the 
selected document already is within the page. However, the edge cases are, the 
selected document is the very first on the page or the very last one, thus the 
previous or next document id is not within the page result from solr -> I guess 
this we could handle by simply checking and sending a second query where the 
param "start" would be adjusted accordingly.

However I would not know how to retrieve the id of the very first document and 
the very last document (except for executing separate queries with I guess 
start=0, rows=1 and start=62181 and rows=1)

For any query and a documentId (of which it is known it is within the query 
result), what is a simple and efficient enough way, to get the following 
navigational information:

-          Previous document Id

-          Next document id

-          First document id

-          Last document id

Can this sort of requirement be handled within one solr query? Should I user 
cursorMark in this scenario?

Best regards,


Reply via email to