SoFunction
Updated on 2025-04-14

Detailed explanation of 4 pagination methods of Elasticsearch in Java

In Elasticsearch, there are 4 common paging methods. In this article, we will analyze the pros and cons of each method and how we choose.

1. Use from and size

usefromandsizeIt is the most commonly used pagination method, through settingfromThe parameter specifies where to start in the result set.sizeThe parameter specifies how many records to return. The syntax is as follows:

GET /index/_search
{
  "from": 10,
  "size": 10,
  "query": {
    "match": {
      "field": "value"
    }
  }
}

advantage

Simple and easy to use: It is very intuitive to implement and is suitable for most basic paging needs.

Widely supported: The Elasticsearch search API supports this pagination method by default.

shortcoming

Performance issues: For deep pages (highfromValue), performance will drop significantly because Elasticsearch needs to skip the previous onefromrecord. This can increase query time, especially whenfromWhen the value is large.

Resource consumption:highfromValues ​​consume more memory and CPU resources, which may affect cluster performance.

Applicable scenarios

  • Light pagination: Applicable to queries on previous pages (for example, pages 1 to 10).
  • Small dataset: When the amount of data is small and the paging requirements are not complicated.

2. Use search_after

search_afterDepth paging is implemented based on sorted values, and continues to retrieve data from the next page by providing the sorted values ​​of the previous page. The syntax is as follows:

GET /index/_search
{
  "size": 10,
  "query": {
    "match": {
      "field": "value"
    }
  },
  "sort": [
    { "timestamp": "asc" },
    { "_id": "asc" }
  ],
  "search_after": [ "2023-01-01T00:00:00", "some_id" ]
}

advantage

Efficient depth paging:compared tofrom/sizesearch_afterPerformance is better when dealing with deep paging and does not significantly decrease as the number of pages increases.

Strong weight removal: Combined with unique sorting fields (such as_id), can avoid duplicate data.

shortcoming

Status Management: The sorted value returned by the last query needs to be saved on the client, which increases the implementation complexity.

Page not to skip: It is impossible to jump to any page directly like traditional paging, and can only turn pages in sequence.

Applicable scenarios

Depth pagination: Suitable for scenarios where large amounts of data are required and efficient performance is required.

Continuous data flow: Suitable for data streaming access, such as log retrieval, real-time data analysis, etc.

3. Use the Scroll API

Scroll APISuitable for processing bulk retrieval of large amounts of data, allowing users to traverse the entire result set by keeping a snapshot at the query moment. The syntax is as follows:

POST /index/_search?scroll=1m
{
  "size": 100,
  "query": {
    "match_all": {}
  }
}

# Get subsequent dataPOST /_search/scroll
{
  "scroll": "1m",
  "scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAA..."
}

advantage

Processing large amounts of data: Suitable for exporting or batch processing of large amounts of data, with stable performance.

Avoid page jumping problems: Use continuous snapshots to avoid changes in data during the retrieval process to affect the results.

shortcoming

Resource consumption: Keeping the scroll context consumes cluster resources, especially when concurrent requests are high.

Not suitable for real-time search:Scroll API is mainly used for one-time search and is not suitable for the pagination needs of user interaction.

Applicable scenarios

Batch data export: Such as data migration, backup, etc.

Large-scale analysis: Scenarios where a large number of documents need to be processed at one time.

4. Use Point in Time

Using Point in Time (PIT) provides a point-in-time query method that allows a consistent view across multiple paging requests. The syntax is as follows:

POST /index/_search?pit=true&size=10
{
  "sort": [...],
  "query": { ... }
}

# Use pit_id for subsequent requestsPOST /index/_search
{
  "pit": {
    "id": "some_pit_id",
    "keep_alive": "1m"
  },
  "sort": [...],
  "query": { ... },
  "search_after": [ ... ]
}

advantage

Consistency view: Maintain consistency of data across multiple paging requests, even if the index changes.

Use in conjunction with search_after: Improve the efficiency and consistency of deep paging.

shortcoming

Increased complexity: PIT sessions need to be managed, including life cycles and resource releases.

Resource consumption: Maintaining a PIT session will occupy cluster resources.

Applicable scenarios

Consistent pagination is required: For example, multiple users browse data at the same time to ensure that the data seen by each user is consistent.

Combined with search_after: Scenes that require efficient depth paging and maintain consistent views.

5. How to choose

5.1 Select according to the page depth

Light pagination (first few pages):usefromandsize, simple implementation and acceptable performance.

Depth pagination:usesearch_afterOr combinedPoint in Time, improve performance and avoid waste of resources.

5.2 According to data consistency requirements

No strict consistency requiredfromandsizeIt is sufficient and suitable for scenarios where data changes in frequent data.

Consistency view required:usePoint in Time, ensure the consistency of data during paging.

5.3 According to the use scenario

User interaction pagination: Usually usedfromandsize, suitable for most web application paging needs.

Batch processing or export: Use the Scroll API, suitable for tasks that process large amounts of data at once.

5.4 Based on resource and performance considerations

Limited resources: Avoid using Scroll API, especially in high concurrency environments.

Performance optimization: For frequent depth paging,search_afterandPoint in TimeIt is a better choice.

6. Summary

  • from and size: Suitable for shallow paging, simple and easy to use, but not suitable for deep paging.
  • search_after: Suitable for depth paging, better performance, but slightly more complex in implementation and does not support random page jumping.
  • Scroll API: Suitable for batch processing and export, and is not suitable for the pagination needs of real-time user interaction.
  • Point in Time (PIT): Provides a consistent paging view, suitable for deep paging scenarios that require data consistency.

According to specific business needs, data volume, paging depth and system resources, select the most appropriate paging method to achieve the best performance and user experience.

This is the end of this article about the 4 pagination methods of Elasticsearch in Java. For more related Java Elasticsearch paging content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!