0
0
Elasticsearchquery~20 mins

Search after for efficient pagination in Elasticsearch - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Search After Pagination Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of search_after with sort keys
What will be the output of the following Elasticsearch query snippet when using search_after for pagination?

Assume the index contains documents sorted by timestamp ascending and id ascending.

{
  "size": 2,
  "query": { "match_all": {} },
  "sort": [
    { "timestamp": "asc" },
    { "id": "asc" }
  ],
  "search_after": ["2023-01-01T00:00:00", "100"]
}

Given the documents:
  • {"timestamp": "2023-01-01T00:00:00", "id": "100"}
  • {"timestamp": "2023-01-01T00:00:01", "id": "101"}
  • {"timestamp": "2023-01-01T00:00:02", "id": "102"}

Which documents will be returned?
Elasticsearch
{
  "size": 2,
  "query": { "match_all": {} },
  "sort": [
    { "timestamp": "asc" },
    { "id": "asc" }
  ],
  "search_after": ["2023-01-01T00:00:00", "100"]
}
ADocuments with timestamp "2023-01-01T00:00:01" and id "101", and timestamp "2023-01-01T00:00:02" and id "102"
BDocuments with timestamp "2023-01-01T00:00:00" and id "100" only
CDocuments with timestamp "2023-01-01T00:00:00" and id "100", and timestamp "2023-01-01T00:00:01" and id "101"
DNo documents returned
Attempts:
2 left
💡 Hint
Remember that search_after returns documents after the given sort values, excluding the document with those exact values.
🧠 Conceptual
intermediate
1:30remaining
Why use search_after instead of from/size for deep pagination?
Why is search_after recommended over from and size for deep pagination in Elasticsearch?
ABecause from/size does not support sorting, while search_after does.
BBecause search_after automatically caches all previous pages for faster access.
CBecause search_after uses the last sort values to efficiently continue from the previous page, avoiding performance issues.
DBecause search_after returns documents in random order, which is faster.
Attempts:
2 left
💡 Hint
Think about how Elasticsearch handles skipping documents with from/size.
🔧 Debug
advanced
2:00remaining
Identify the error in search_after usage
What error will this Elasticsearch query produce?

{
  "size": 3,
  "query": { "match_all": {} },
  "sort": [
    { "date": "desc" }
  ],
  "search_after": ["2023-05-01"]
}

Assuming the date field is of type date and the sort expects a date and a tie-breaker field.
Elasticsearch
{
  "size": 3,
  "query": { "match_all": {} },
  "sort": [
    { "date": "desc" }
  ],
  "search_after": ["2023-05-01"]
}
AThe query will run successfully and return documents after the given date.
BElasticsearch will raise a SearchPhaseExecutionException due to missing tie-breaker sort field.
CElasticsearch will raise a ParsingException due to invalid date format in search_after.
DThe query will return documents sorted ascending instead of descending.
Attempts:
2 left
💡 Hint
search_after requires the sort fields and search_after values to match exactly in number and order.
📝 Syntax
advanced
1:30remaining
Correct search_after syntax for multi-field sort
Which of the following is the correct search_after syntax for this sort?

"sort": [
  { "price": "asc" },
  { "rating": "desc" },
  { "_id": "asc" }
]
A[100, 4.5, "abc123"]
B[100, "abc123", 4.5]
C["abc123", 100, 4.5]
D[4.5, 100, "abc123"]
Attempts:
2 left
💡 Hint
The order of values in search_after must match the order of fields in sort.
🚀 Application
expert
3:00remaining
Implementing efficient deep pagination with search_after
You have an Elasticsearch index with millions of documents sorted by created_at ascending and doc_id ascending.

You want to fetch page 1000 with 10 documents per page efficiently.

Which approach correctly uses search_after to get page 1000?
AUse a scroll API instead of search_after for page 1000.
BUse from: 9990 and size: 10 to jump directly to page 1000.
CUse search_after with the sort values from page 1 to jump directly to page 1000.
DIteratively query pages 1 to 999 using search_after, storing the last sort values each time, then query page 1000 with those values.
Attempts:
2 left
💡 Hint
search_after requires the last document's sort values from the previous page to continue.