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)注和贊,感謝