Paginating Results in Amazon CloudSearch
By default, Amazon CloudSearch returns the top ten hits according to the specified sort order. To
control the number of hits returned in a result set, you use the size
parameter.
To get the next set of hits beginning from a particular offset, you can use the
start
parameter. Note that the result set is zero-based—the first
result is at index 0. You can get the first 10,000 hits using the size
and start
parameters. To page through more than 10,000 hits,
use the cursor
parameter. For more information, see Deep Paging Beyond 10,000 Hits .
For example, search?q=wolverine
returns the first 10 hits that contain
wolverine, starting at index 0. The following example sets the
start
parameter to 10 to get the next set of ten hits.
search?q=wolverine&start=10
If you want to retrieve 25 hits at a time, set the size
parameter to 25.
To get the first set of hits, you don't have to set the start
parameter.
search?q=wolverine&size=25
For subsequent requests, use the start
parameter to retrieve the set of
hits you want. For example, to get the third batch of 25 hits, specify the following:
search?q=wolverine&size=25&start=50
Deep Paging Beyond 10,000 Hits in Amazon CloudSearch
Using size
and start
to page through results works
well if you only need to access the first few pages of results. However, if you need to page through
thousands of hits, using a cursor is more efficient. To page through more than 10,000 hits, you must
use a cursor
. (You can only access the first 10,000 hits using the start
and size
parameters.)
To page through
results using a cursor, you specify cursor=initial
in your initial
search request and include the size
parameter to specify how many hits
you want to get. Amazon CloudSearch returns a cursor value in the response that you use to get the
next set of hits. Cursors return sequential sets of hits; however, you can use them
to simulate random access of a deep page if you need to. Keep in mind that cursors
are intended to be used to page through a result set within a reasonable amount of
time of the initial request. Using a stale cursor can return stale results if
updates have been posted to the index in the interim.
Important
When you use a cursor to page through a result set that is sorted by document score (_score
), you can get inconsistent results if the index is updated between requests. This can also occur if your domain's replication count is greater than one, because updates are applied in an eventually consistent manner across the instances in the domain. If this is an issue, avoid sorting the results by score. You can either use the sort
option to sort by a particular field, or use fq
instead of q
to specify your search criteria. (Document scores are not calculated for filter queries.)
For example, the following request sets the cursor
value to
initial
and the size
parameter to 100
to
get the first set of hits.
search?q=-star&cursor=initial&size=100
The cursor for the next set of hits is included in the response.
{ "status": { "rid": "z67+3L0oHgo6swY=", "time-ms": 7 }, "hits": { "found": 1649, "start": 0, "cursor": "Vb-HSS4YQW9JSVFKeFpvQ2wwZERBek16SXpOems9Aw", "hit": [ { "id": "tt0397892" }, . . . { "id": "tt0332379" } ] } }
In the next request, the cursor
parameter specifies the returned
cursor value.
search?q=-star&cursor=Vb-HSS4YQW9JSVFKeFpvQ2wwZERBek16SXpOems9Aw&size=100