ES DSL搜索 - 深度分頁與優(yōu)化

1 介紹

主要介紹索引請求的基礎(chǔ)API操作钳垮,使用postman進(jìn)行請求坯认,接口請求的前綴地址統(tǒng)一為elasticsearch 部署IP地址+端口號(例如 http://192.168.51.4:9200 饶囚。

統(tǒng)一請求地址:

POST /search_demo/_doc/_search

2 深度分頁弊端

深度分頁其實(shí)就是搜索的 深淺度越锈,比如第1頁绍些,第2頁炒瘸,第20頁淤堵,都是比較淺的搜索;而第10000頁顷扩,第20000頁都是很深了拐邪。

傳遞JSON數(shù)據(jù)

{
    "query": {
        "match_all": {}
    },
    "from": 9999,
    "size": 10
}

請求結(jié)果有如下報(bào)錯(cuò)

Result window is too large, from + size must be less than or equal to: [10000] but was [10009].

在獲取9999到10009條數(shù)據(jù)的時(shí)候,如果索引有三個(gè)分片的話隘截,其實(shí)搜索是將從每個(gè)分片里面都獲取10009條數(shù)據(jù)扎阶,然后集合在一起汹胃,總共是10009 * 3 = 30027條數(shù)據(jù),針對30027條數(shù)據(jù)再次進(jìn)行排序處理东臀,最后得到最后的10條數(shù)據(jù)着饥。

如此一來,搜索的越深入惰赋,就會造成性能問題宰掉,會耗費(fèi)內(nèi)存和占用CPU。es為了性能赁濒,它不支持超過一萬條以上的分頁查詢轨奄。

3 優(yōu)化深度分頁

3.1 避免深度分頁

避免深度分頁操作可以通過限制分頁頁碼,比如最多只能提供100頁的展示拒炎,從101也開始就沒了挪拟,針對一般用戶搜索頁碼翻取不會太多的情況。

3.2 提升搜索量

設(shè)置 index.max_result_window 參數(shù)击你,自定義最大搜索數(shù)量

PUT /search_demo/_settings
{
   "index.max_result_window": 20000
}

3.3 滾動搜索

scroll 滾動搜索(游標(biāo)查詢)舞丛,滾動搜索可以先查詢出一些數(shù)據(jù),然后再緊接著依次往下查詢果漾。在第一次查詢的時(shí)候會有一個(gè)滾動ID球切,相當(dāng)于一個(gè) 錨標(biāo)記,隨后再次滾動搜索會需要上次搜索的 錨標(biāo)記绒障,根據(jù)這個(gè)進(jìn)行下一次的搜索請求吨凑。

每次搜索都是基于一個(gè)歷史的數(shù)據(jù)快照,查詢數(shù)據(jù)的期間户辱,如果有數(shù)據(jù)變更鸵钝,搜索的內(nèi)容并不會發(fā)生改變。

  • scroll=1m庐镐,相當(dāng)于是一個(gè)session會話時(shí)間恩商,搜索保持的上下文時(shí)間為1分鐘。

官方地址:

https://www.elastic.co/guide/cn/elasticsearch/guide/current/scroll.html

第一次請求

POST /search_demo/_search?scroll=1m
{
    "query": {
        "match_all": {}
    },
    "sort": ["_doc"],
    "size": 1
}
{
    "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoAgAAAAAAAAAwFmt1RWVPY09BUm51RGZTMnF3VUE2bFEAAAAAAAAAMRZrdUVlT2NPQVJudURmUzJxd1VBNmxR",
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 18,
            "relation": "eq"
        },
        "max_score": null,
        "hits": [
            {
                "_index": "search_demo",
                "_type": "_doc",
                "_id": "1001",
                "_score": null,
                "_source": {
                    "id": 1001,
                    "age": 18,
                    "username": "Tic",
                    "nickname": "飛翔的荷蘭號",
                    "money": 88.8,
                    "desc": "我在p2pi網(wǎng)站解決項(xiàng)目中遇到的問題必逆,學(xué)習(xí)到了很多知識",
                    "sex": 0,
                    "birthday": "1992-12-24",
                    "face": "http://www.p2pi.cn/static/img/1001_face.png"
                },
                "sort": [
                    0
                ]
            }
        ]
    }
}

第二次請求

  • scroll_id:第一次請求返回的 _scroll_id
POST /_search/scroll
{
   "scroll_id": "DnF1ZXJ5VGhlbkZldGNoAgAAAAAAAAAwFmt1RWVPY09BUm51RGZTMnF3VUE2bFEAAAAAAAAAMRZrdUVlT2NPQVJudURmUzJxd1VBNmxR",
   "scroll": "1m"
}
{
    "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoAgAAAAAAAAAwFmt1RWVPY09BUm51RGZTMnF3VUE2bFEAAAAAAAAAMRZrdUVlT2NPQVJudURmUzJxd1VBNmxR",
    "took": 5,
    "timed_out": false,
    "terminated_early": true,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 18,
            "relation": "eq"
        },
        "max_score": null,
        "hits": [
            {
                "_index": "test",
                "_type": "_doc",
                "_id": "2001",
                "_score": null,
                "_source": {
                    "id": "2001",
                    "nickname": "test-2001"
                },
                "sort": [
                    0
                ]
            }
        ]
    }
}

4 相關(guān)信息

  • 博文不易怠堪,辛苦各位猿友點(diǎn)個(gè)關(guān)注和贊,感謝
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末名眉,一起剝皮案震驚了整個(gè)濱河市粟矿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌损拢,老刑警劉巖陌粹,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異福压,居然都是意外死亡掏秩,警方通過查閱死者的電腦和手機(jī)或舞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒙幻,“玉大人映凳,你說我怎么就攤上這事「松罚” “怎么了魏宽?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵腐泻,是天一觀的道長决乎。 經(jīng)常有香客問我,道長派桩,這世上最難降的妖魔是什么构诚? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮铆惑,結(jié)果婚禮上范嘱,老公的妹妹穿的比我還像新娘。我一直安慰自己员魏,他們只是感情好丑蛤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撕阎,像睡著了一般受裹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虏束,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天棉饶,我揣著相機(jī)與錄音,去河邊找鬼镇匀。 笑死照藻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汗侵。 我是一名探鬼主播幸缕,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晰韵!你這毒婦竟也來了冀值?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤宫屠,失蹤者是張志新(化名)和其女友劉穎列疗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浪蹂,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抵栈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年告材,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片古劲。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斥赋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出产艾,到底是詐尸還是另有隱情疤剑,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布闷堡,位于F島的核電站隘膘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杠览。R本人自食惡果不足惜弯菊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望踱阿。 院中可真熱鬧管钳,春花似錦、人聲如沸软舌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佛点。三九已至醇滥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恋脚,已是汗流浹背腺办。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糟描,地道東北人怀喉。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像船响,于是被迫代替她去往敵國和親躬拢。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容