Elasticsearch(ES)分頁

Elasticsearch(簡稱 ES)本身不適合傳統意義上的“深分頁”,但提供了多種分頁方式,每種適用不同場景。我們來詳細講解:


一、基本分頁(from + size)

最常用的分頁方式,類似 SQL 的 LIMIT offset, size

查詢語法示例:

GET /products/_search
{"query": {"match_all": {}},"from": 20,"size": 10
}

表示從第 21 條記錄開始,取 10 條(第 3 頁,每頁 10 條)

優點:

  • 簡單直觀,適合前幾頁瀏覽。

缺點:

  • 深分頁性能差:from 越大,ES 處理速度越慢,浪費內存和 CPU。
  • 默認最大 from + size10000(可修改 index.max_result_window

二、Scroll 分頁(適合大批量導出)

Scroll 是一種游標查詢,用于大量數據批量處理,如導出所有數據。

查詢示例:

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

響應返回:

{"_scroll_id": "...","hits": {"hits": [ ... ]}
}

繼續獲取下一頁:

POST /_search/scroll
{"scroll": "1m","scroll_id": "..."
}

優點:

  • 適合全量導出、日志批處理等任務。
  • 內部避免重新排序,性能好。

缺點:

  • 不是實時的,不能跳頁。
  • scroll 占內存,需要及時清除。

三、Search After(推薦用于深分頁)

官方推薦用于實時系統中分頁跳轉到深頁,無需使用 from

使用前提:

  • 必須排序
  • 每頁記錄中攜帶上頁最后一條的排序字段值

示例:

第一頁請求:

POST /products/_search
{"size": 10,"sort": [{ "price": "asc" }, { "_id": "asc" }]
}

返回結果中,拿到最后一條記錄的排序值:

"sort": [100.0, "abc123"]

第二頁請求使用 search_after

POST /products/_search
{"size": 10,"sort": [{ "price": "asc" }, { "_id": "asc" }],"search_after": [100.0, "abc123"]
}

優點:

  • 性能優于 from + size 的深分頁
  • 可實時查詢,穩定

缺點:

  • 不支持跳頁(只能“下翻頁”)
  • 前端不能直接點跳轉頁碼(需記住前頁的 sort 值)

四、Pit(Point in Time)+ Search After(ES 7.10+)

在使用 search_after 時,為避免分頁期間數據變動帶來的不一致問題,可以使用 PIT。

創建 PIT:

POST /products/_pit?keep_alive=1m

返回:

{"pit_id": "xxx"
}

查詢:

POST /products/_search
{"size": 10,"pit": {"id": "xxx","keep_alive": "1m"},"sort": [{ "price": "asc" }, { "_shard_doc": "asc" }],"search_after": [...]
}

各分頁方式對比

方式跳頁支持深分頁性能實時性適合場景
from + size???首頁、少量分頁
scroll???導出/批處理
search_after????深分頁、翻頁
pit + search_after?????實時且一致性強

實踐建議

分頁需求類型建議用法
普通分頁from + size
超過1萬條數據導出scroll
深分頁、實時查詢search_after + sort
高一致性深分頁pit + search_after

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912263.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912263.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912263.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

原生微信小程序:用 `setData` 正確修改數組中的對象項狀態(附實戰技巧)

📌 背景介紹 在微信小程序開發中,我們經常需要修改數組中某個對象的某個字段,比如: 列表中的某一項展開/收起多選狀態切換數據列表中的臨時標記等 一個常見的場景是: lists: [{ show: true }, { show: true }, { s…

Oracle 臨時表空間相關操作

一、臨時表空間概述 臨時表空間(Temporary Tablespace)是Oracle數據庫中用于存儲臨時數據的特殊存儲區域,其數據在會話結束或事務提交后自動清除,重啟數據庫后徹底消失。主要用途包括: 存儲排序操作(如OR…

從靜態到動態:Web渲染模式的演進和突破

渲染模式有好多種,了解下web的各種渲染模式,對技術選型有很大的參考作用。 一、靜態HTML時代 早期(1990 - 1995年)網頁開發完全依賴手工編寫HTML(HyperText Markup Language)和CSS(層疊樣式表…

Flask(六) 數據庫操作SQLAlchemy

文章目錄 一、準備工作二、最小化可運行示例? 補充延遲綁定方式(推薦方式) 三、數據庫基本操作(增刪改查)1. 插入數據(增)2. 查詢數據(查)3. 更新數據(改)4.…

PYTHON從入門到實踐7-獲取用戶輸入與while循環

# 【1】獲取用戶輸入 # 【2】python數據類型的轉換 input_res input("請輸入一個數字\n") if int(input_res) % 10 0:print("你輸入的數是10的倍數") else:print("你輸入的數不是10的倍數") # 【3】while循環,適合不知道循環多少次…

學習筆記(C++篇)—— Day 8

1.STL簡介 STL(standard template libaray-標準模板庫):是C標準庫的重要組成部分,不僅是一個可復用的組件庫,而且是一個包羅數據結構與算法的軟件框架。 2.STL的六大組件 先這樣,下一部分是string的內容,內容比較多&a…

ant+Jmeter+jenkins接口自動化,如何實現把執行失敗的接口信息單獨發郵件?

B站講的最好的自動化測試教程,工具框架附項目實戰一套速通,零基礎完全輕松掌握!自動化測試課程、web/app/接口 實現AntJMeterJenkins接口自動化失敗接口郵件通知方案 要實現只發送執行失敗的接口信息郵件通知,可以通過以下步驟實…

惡意Python包“psslib“實施拼寫錯誤攻擊,可強制關閉Windows系統

Socket威脅研究團隊發現一個名為psslib的惡意Python包,該軟件包偽裝成提供密碼安全功能,實則會突然關閉Windows系統。這個由化名umaraq的威脅行為者開發的軟件包,是對知名密碼哈希工具庫passlib的拼寫錯誤仿冒(typosquatting&…

云原生灰度方案對比:服務網格灰度(Istio ) 與 K8s Ingress 灰度(Nginx Ingress )

服務網格灰度與 Kubernetes Ingress 灰度是云原生環境下兩種主流的灰度發布方案,它們在架構定位、實現方式和適用場景上存在顯著差異。以下從多個維度對比分析,并給出選型建議: 一、核心區別對比 維度服務網格灰度(以 Istio 為例…

科技如何影響我們的生活?

科技已成為我們生活中不可或缺的一部分,徹底改變了我們工作、溝通和生活的方式。從智能手機到智能家居,科技已滲透到我們生活的每個角落。無論是用手機鬧鐘開啟新的一天,通過 Alexa 開關燈光,還是打開 Uber 或 Lyft 打車上班&…

Re--攻防世界-基礎android

Jadx 可以看到有賬號密碼輸入 進入checkPassword函數 分析一下: 對每個字符 pass[len] 進行以下計算 pass[len] (char) (((255 - len) - 100) - pass[len]); 解密腳本 def decrypt_password(): password [] for len in range(12): c (255 - le…

InnoDB表空間結構-系統表空間

系統表空間整體結構 頁號為7的SYS類型頁結構

如何構建知識庫

構建個人知識庫是一個系統化的過程,需要結合工具選擇、信息管理和持續優化。以下是分步驟的實用指南,包含現代工具和方法的建議: 一、明確知識庫定位(Why) ?核心目標? 學習型:支持學術研究/職業發展&…

3 大語言模型預訓練數據-3.2 數據處理-3.2.2 冗余去除——2.SimHash算法文本去重實戰案例:新聞文章去重場景

SimHash算法文本去重實戰案例:新聞文章去重場景 一、案例背景與目標二、具體實現步驟與示例1. **待去重文本示例**2. **步驟1:文本預處理與特征提取**3. **步驟2:特征向量化與哈希映射**4. **步驟3:特征向量聚合**5. **步驟4&…

MSPM0G3507之GPIO配置報錯 #Sysconfig報錯

聲明:本文完全免費閱讀,如果你發現某天文章被設置了“VIP權限”,請私信我解除(非筆者所為)。 一、問題現象 在打開sysconfig后,GPIO這里會報錯。 Unable to render selection Error:launchPadShortcut:Vali…

2025年檢測相機十大品牌測評:工業級精度與場景化解決方案解析

一、引言 在工業自動化與智能制造領域,檢測相機作為質量管控的核心硬件,正以“高精度、高速度、高適應性”的特性重塑生產流程。這類設備通過光學成像與智能算法結合,實現對工件表面缺陷、尺寸偏差、裝配精度的精準檢測,效率較傳…

Python異步編程深度解析

一、異步編程范式演進 同步阻塞的困境:GIL限制與線程切換開銷 事件循環本質:單線程并發模型 協程優勢:比線程更輕量的執行單元 IO密集型場景:網絡請求/文件操作的最佳實踐 二、核心語法精要 import asyncioasync def fetch_…

網絡緩沖區

用戶態網絡緩沖區 網絡緩沖區原理為什么需要用戶態網絡緩沖區Linux下如何接收和發送數據包用戶態網絡緩沖區設計的本質 網絡緩沖區代碼實現 網絡緩沖區原理 為什么需要用戶態網絡緩沖區 在網絡開發中,我們經常使用到read/write/recv/send等系統調用接口&#xff0…

微信小程序實現簡版點贊動畫

這是第二次寫canvas,基于微信小程序文檔demo進行改寫 demo效果為方塊橫向來回循環移動 我想做的是直播間那種點贊效果,豎向曲線移動、方塊換成圖片、點擊添加繪制元素 第一階段實現豎向曲線移動、點擊添加繪制元素;下一階段講方塊替換為圖…

實現一個AI大模型當前都無法正確實現的基礎二叉樹讀取算法

概述 圖1: 圖2: 上圖幫大家溫習完全二叉樹的概念,本文講的是完全順序二叉樹的初始化 華為的員工、考過華為OD的員工、參加過其他類似大廠的考試的員工一般做過二叉樹的初始化,甚至有些還碰到過手撕代碼時面試官要求做二叉樹遍歷,看完本文的…