Saturday, March 17, 2018

FW: Navigation/Paging

-----Original Message-----
From: Sebastian Riemer [mailto:s.riemer@littera.eu]
Sent: 13 March 2018 21:56
To: solr-user@lucene.apache.org
Subject: Navigation/Paging

Hi,

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
><http://test.litterare.local:3100/littera/libraries/2/cat/man?locale=en>
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 size.

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 this:

<< First < Prev 1 - 15 of 62181 Next
><http://test.litterare.local:3100/littera/libraries/2/cat/man?locale=en>
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)

TL,DR:
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,

Sebastian

No comments:

Post a Comment