1、from和size是查詢所有數(shù)據(jù),然后剔除不要的部分
POST /my_index/my_type/_search
{
"query": { "match_all": {}},
"from": 100,
"size": 10
}
2、scroll是記錄了一個讀取的位置,保證下一次快速繼續(xù)讀取
scroll
查詢階段:將查詢的結(jié)果集,doc_id列表保存在了一個上下文里
fetch階段:根據(jù)size取回即可
POST /twitter/tweet/_search?scroll=1m
{
"size": 100,
"query": {
"match" : {
"title" : "elasticsearch"
}
}
}
Query階段:每個shard將命中的結(jié)果( doc_id和_score) 按照 _score 順序在上下文中創(chuàng)建一個優(yōu)先隊(duì)列快照,并通過scroll_id指向它,lastEmittedDoc指向上次訪問的位置,最后將TOP(size)的doc id返回給協(xié)調(diào)節(jié)點(diǎn)。
Fetch階段:協(xié)調(diào)節(jié)點(diǎn)將各個shard返回的結(jié)果再進(jìn)行合并排序,最后通過doc_id查找返回結(jié)果的全量數(shù)據(jù)。之后更新各個分片上的上下文。
?
3、search_after
根據(jù)上一頁最后一條數(shù)據(jù)來確定下一頁的位置,因?yàn)槊恳豁摰臄?shù)據(jù)依賴于上一頁最后一條數(shù)據(jù),所以無法完成跳頁請求;在分頁請求過程中如果有索引數(shù)據(jù)的增刪改查,這些變更也會實(shí)時的反映到游標(biāo)上。
核心思想記錄上一次最后訪問的位置
GET twitter/_search
{
"size": 10,
"query": {
"match" : {
"title" : "es"
}
},
"search_after": [124648691, "624812"],
"sort": [
{"date": "asc"},
{"_id": "desc"}
]
}
ES的排序方式
在query階段就要進(jìn)行排序,不全量查詢的情況下怎么排序的?
- filter 查詢 為?doc_id(Lucene 文件結(jié)構(gòu)的當(dāng)時索引時的先后順序)
- 按照相關(guān)性得分排序( _score)
- 按照指定的字段排序 (term index中的順序)
es默認(rèn)分頁查詢方式
分頁方式 | 性能 | 優(yōu)點(diǎn) | 缺點(diǎn) | 場景 |
---|---|---|---|---|
from + size | 低 | 靈活性好,實(shí)現(xiàn)簡單 | 深度分頁問題 | 數(shù)據(jù)量比較小,能容忍深度分頁問題 |
scroll | 中 | 解決了深度分頁問題 | 無法反應(yīng)數(shù)據(jù)的實(shí)時性(快照版本)維護(hù)成本高,需要維護(hù)一個 scroll_id | 海量數(shù)據(jù)的導(dǎo)出需要查詢海量結(jié)果集的數(shù)據(jù) |
search_after | 高 | 性能最好不存在深度分頁問題能夠反映數(shù)據(jù)的實(shí)時變更 | 實(shí)現(xiàn)復(fù)雜,需要有一個全局唯一的字段連續(xù)分頁的實(shí)現(xiàn)會比較復(fù)雜,因?yàn)槊恳淮尾樵兌夹枰洗尾樵兊慕Y(jié)果,它不適用于大幅度跳頁查詢 |
京東面試題:ElasticSearch深度分頁解決方案文章來源:http://www.zghlxwxcb.cn/news/detail-408013.html
es分頁查詢原理_喂喂喂_java的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-408013.html
到了這里,關(guān)于es 分頁查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!