ElasticSearch分頁查詢的實現

2022-10-09 09:27:11 字數 2105 閱讀 4979

put /t_order

, "properties" : }},

"cancel_time" : ,

"create_time" : ,

"create_user" : ,

"delivery_type" : ,

"discount_amount" : ,

"expired_time" : ,

"id" : ,

"is_deleted" : ,

"is_pay" : ,

"is_postsale" : ,

"order_amount" : ,

"order_code" : }},

"order_remark" : }},

"order_status" : ,

"pay_amount" : ,

"pay_time" : ,

"pay_type" : ,

"postage" : ,

"product_amount" : ,

"serial_code" : }},

"shop_id" : ,

"update_time" : ,

"update_user" : ,

"user_id" :

}}post /t_order/_search

}}

2、新增測試資料

post /t_order/_bulk

3、演示(show me the code):

### from + size [深度翻頁不推薦使用 from + size]

#from + size 兩個引數定義了結果頁面顯示資料的內容。

#from:未指定,預設值是 0,注意不是1,代表當前頁返回資料的起始值。

#size:未指定,預設值是 10,代表當前頁返回資料的條數。

post /ds-trade_t_order/_search

}}

### searchafter [官方文件強調:不再建議使用scroll api進行深度分頁。如果要分頁檢索超過 top 10,000+ 結果時,推薦使用:pit + search_after。]

#part1:建立 pit 檢視,這是前置條件不能省。

post /ds-trade_t_order/_pit?keep_alive=5m

#part2:建立基礎查詢語句,這裡要設定翻頁的條件。

post /_search

},"pit": ,

"sort": [

}]}

#part3:實現後續翻頁:後續翻頁都需要借助 search_after 指定前一頁的最後乙個文件的 sort 字段值。

post /_search

},"pit": ,

"sort": [}],

"search_after": [

1648557674000,

7]}

###scroll [全量或資料量很大時遍歷結果資料,而非分頁查詢。]

#part1:指定檢索語句同時設定 scroll 上下文保留時間

post /t_order/_search?scroll=3m

} , "sort": [

}]}

#part2:指定檢索語句同時設定 scroll 上下文保留時間

post /_search/scroll

總結:

from+ size:需要隨機跳轉不同分頁(類似主流搜尋引擎)、top 10000 條資料之內分頁顯示場景。

search_after:僅需要向後翻頁的場景及超過top 10000 資料需要分頁場景。

scroll:需要遍歷全量資料場景 。

max_result_window:調大治標不治本,不建議調過大。

pit:本質是檢視。

參考資料————————————————

Elasticsearch 分頁問題

1.form和size的方式 2.scroll api 3.search after引數 按照一般的查詢流程來說,如果我想查詢前10條資料 1 客戶端請求發給某個節點 2 節點 給個個分片,查詢每個分片上的前10條 3 結果返回給節點,整合資料,提取前10條 4 返回給請求客戶端 該分頁方式可以通過...

ElasticSearch 分頁查詢

在預設情況下,elasticsearch 查詢返回前10條匹配的文件。為了對大批量查詢結果分頁,最簡單方式是在查詢api中新增from和size引數,from表示需要返回的滿足查詢條件的數量,size表示查詢起始資料在全量結果集中的偏移量。建立實驗索引 put linked blog get lin...

elasticsearch深度分頁索引

背景 es 深度分頁索引效率問題 1.常見深度分頁方式 from size es 預設採用的分頁方式是 from size 的形式,在深度分頁的情況下,這種使用方式效率是非常低的,比如 from 5000,size 10000,es 需要在各個分片上匹配排序並得到5000 10000條有效資料,然後...