Description
I'd like to revist a solution to the problem of "deep paging" in Solr, leveraging an HTTP based API similar to how IndexSearcher.searchAfter works at the lucene level: require the clients to provide back a token indicating the sort values of the last document seen on the previous "page". This is similar to the "cursor" model I've seen in several other REST APIs that support "pagnation" over a large sets of results (notable the twitter API and it's "since_id" param) except that we'll want something that works with arbitrary multi-level sort critera that can be either ascending or descending.
SOLR-1726 laid some initial ground work here and was commited quite a while ago, but the key bit of argument parsing to leverage it was commented out due to some problems (see comments in that issue). It's also somewhat out of date at this point: at the time it was commited, IndexSearcher only supported searchAfter for simple scores, not arbitrary field sorts; and the params added in SOLR-1726 suffer from this limitation as well.
—
I think it would make sense to start fresh with a new issue with a focus on ensuring that we have deep paging which:
- supports arbitrary field sorts in addition to sorting by score
- works in distributed mode
- send a request with sort=X&start=0&rows=N&cursorMark=*
- sort can be anything, but must include the uniqueKey field (as a tie breaker)
- "N" can be any number you want per page
- start must be "0"
- "*" denotes you want to use a cursor starting at the beginning mark
- parse the response body and extract the (String) nextCursorMark value
- Replace the "*" value in your initial request params with the nextCursorMark value from the response in the subsequent request
- repeat until the nextCursorMark value stops changing, or you have collected as many docs as you need
Attachments
Attachments
Issue Links
- is blocked by
-
SOLR-5354 Distributed sort is broken with CUSTOM FieldType
- Closed
- is related to
-
SOLR-5652 Heisenbug in DistribCursorPagingTest: "walk already seen ..."
- Closed
-
SOLR-5671 Heisenbug #2 in DistribCursorPagingTest: full walk returns one fewer doc than expected
- Closed
-
SOLR-5595 Distributed Sort: potential performance improvements & code readabiliity
- Open
-
LUCENE-5380 PagingFieldCollector should track previous page hits
- Open
- relates to
-
SOLR-6121 cursorMark should accept sort param without explicit uniqueKey, do implicit uniqueKey tie breaker sort under the hood
- Open
- supercedes
-
SOLR-1726 Deep Paging and Large Results Improvements
- Resolved