ES 的 4 種分頁方式,如何選擇?

在 Elasticsearch 中,有 4 種常見的分頁方法,這篇文章,我們將分析每種方法的優缺點以及我們該如何選擇。

1. 使用 from 和 size

使用 from 和 size是最常用的分頁方式,通過設置 from 參數指定從結果集的哪個位置開始,size 參數指定返回多少條記錄。使用語法如下:

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

優點

缺點

適用場景

2. 使用 search_after

search_after基於排序值實現深度分頁,通過提供上一個頁面的排序值來繼續檢索下一頁的數據。使用語法如下:

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

優點

缺點

適用場景

3. 使用 Scroll API

Scroll API適用於處理大量數據的批量檢索,通過保持一個在查詢時刻的快照,允許用戶遍歷整個結果集。使用語法如下:

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

# 獲取後續數據
POST /_search/scroll
{
"scroll""1m",
"scroll_id""DXF1ZXJ5QW5kRmV0Y2gBAAAAAAA..."
}

優點

缺點

適用場景

4. 使用 Point in Time

使用 Point in Time (PIT) 提供了一種基於時間點的查詢方式,允許在多個分頁請求中維持一致的視圖。使用語法如下:

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

# 後續請求使用 pit_id
POST /index/_search
{
"pit": {
    "id""some_pit_id",
    "keep_alive""1m"
  },
"sort": [...],
"query": { ... },
"search_after": [ ... ]
}

優點

缺點

適用場景

5. 如何選擇?

5.1 根據分頁深度選擇

5.2 根據數據一致性要求

5.3 根據使用場景

5.4 根據資源和性能考慮

6. 總結

本文,我們介紹了 ES的4種分頁方式:

在實際開發中,我們需要根據具體的業務需求、數據量、分頁深度和系統資源,選擇最合適的分頁方法,以達到最佳的性能和用戶體驗。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/cZSPYWwKkpl_cqWIqNpAtw