ES中實現分頁查詢資料並返回想要的字段

2021-09-26 22:32:16 字數 1548 閱讀 2598

在日誌收集系統中,最近需要通過httpclient獲取es中的日誌資訊,所以學習了一些es的查詢語句方面的用法;

分頁的本質

分頁的本質是從「大的資料集」中取出一部分。比如10000條記錄,每頁10條資料。取第二頁即第11條到20條資料。es或者資料庫怎麼知道哪些資料是第二部分(第2頁),哪些是第三部分(第3頁)呢?答案是es或者資料庫不知道,所以正確的分頁必須要指定分頁的順序,即要有order by或者sort語句。

在es中有三種方式可以實現分頁:from+size、scroll、search_after

}},

"must":}}

},

在上述查詢語句中,from欄位的值表示的是從所有資訊的第0行開始,找出size條的資訊,如果需要找出第21到第30條的資訊,則應該設定from = 21, size = 10.

在實際應用中,我們可以設定兩者的數值大小,以適應不同的需求。

相對於from和size的分頁來說,使用scroll可以模擬乙個傳統資料的游標,記錄當前讀取的文件資訊位置。這個分頁的用法,不是為了實時查詢資料,而是為了一次性查詢大量的資料(甚至是全部的資料)。因為這個scroll相當於維護了乙份當前索引段的快照資訊,這個快照資訊是你執行這個scroll查詢時的快照。在這個查詢後的任何新索引進來的資料,都不會在這個快照中查詢到。但是它相對於from和size,不是查詢所有資料然後剔除不要的部分,而是記錄乙個讀取的位置,保證下一次快速繼續讀取。

curl -xget 'localhost:9200/twitter/tweet/_search?scroll=1m'

-d '

}}//通過返回的scroll_id繼續查詢資訊

curl -xget '集群節點ip:9200/_search/scroll?scroll=1m&scroll_id=c2nhbjs2ozm0ndg1odpzrlblc0fxnlnynm5jwuc1'

該查詢會自動返回乙個_scroll_id,通過這個id(經過base64編碼)可以繼續查詢

search_after引數通過提供實時游標來解決分頁中遇到的消耗記憶體和時間增長問題。

檢索第一頁的資料後,

post twitter/_search},

"sort":[

,]}

get twitter/_search},

"search_after":[

1463538857

,"654323"],

"sort":[

,]}

當使用search_after時,from的屬性值應該置為0或者-1,也可以不設定from這個屬性。

應用_source可以返回使用者想要返回的字段

,"size":40

,"from":0

}

includes屬性中表示的是想要獲取的字段,excludes表示不想要的字段,

_source雖然很好用,但是它會占用很大的索引的儲存空間,可以通過enabled false禁用

express返回資料實現分頁

var express require express var router express.router let lesson 獲取課程介面 伺服器一共有18條資料。每次取5條 下次從5條偏移5條 offset偏移量 limit每次取多少條 type課程型別 router.get offset l...

後台實現通用的分頁查詢json資料的返回

在bean中建立乙個msg物件,封裝查詢好的頁面資訊,包括狀態碼以及提示資訊 public class msgpublic static msg fail public msg add string key,object value public intgetcode public void set...

ajax實現資料分頁查詢

用ajax實現對資料庫的查詢以及對查詢資料進行分頁,供大家參考,具體內容如下 主頁面 無標題文件 代號名稱 父級代號 js 處理頁面1 db new dbda key post key num 20 sql select count from chinastates where areaname l...