Your phrasing of the question may be convoluting things -- you refered to
"DocID" but it's not clear if you mean...
* the low level internal lucene doc id
* the uniqueKey field of your schema.xml
* some identifier whose providence you don't care about.
In the first case, you can use the doctransformer jack mentioned, and you
can even sort on the internal lucene id using "_docid_" but you can't
really filter on it.
In the context of your specific problem the internal lucene doc id
wouldn't help you anyway, since internal lucene doc ids can change as
segments get merged and delets get flushed.
You can however use any of the later two cases, along with an fq to
implement" cursor" style logic to insure you never get the same document
more then once. instead of increasing the "start" param, you just
specify an fq param that filters on you id field using a range
query, and you constinually increase (or descrease) the boundary on the
range based on the last document fetched.
using your previous example...
: query return
: start=0&rows=1 A
: start=1&rows=1 B
: start=2&rows=1 C
you would instead do...
start=0&rows=1&sort=id+asc A
start=0&rows=1&sort=id+asc&fq=id:{A TO *] B
start=0&rows=1&sort=id+asc&fq=id:{B TO *] C
If you choose your id field such that the ids were always increasing (ie:
time based) then you could also be certain that you were always able to
fetch all documents (ie: you would never miss a doc because you were
already "past" it's place in the ordered list of docs)
-Hoss