更新时间:2024-11-29 GMT+08:00
游标查询(scroll)
Elasticsearch为了避免深分页,不允许使用分页(from&size)查询10000条以后的数据,需要使用游标(scroll)查询。
安全模式下scroll查询示例:
curl -XGET --tlsv1.2 --negotiate -k -u : "https://ip:httpport/myindex-001/_search?scroll=1m&pretty" -H 'Content-Type: application/json' -d' { "query": { "match": { "age": "36" } }, "size":1000 }'
使用scroll查询,应该在初始搜索请求中指定scroll参数,这个参数告诉Elasticsearch保持游标窗口期多长时间。例如:scroll=1m,表示1分钟。
结果返回:
{ "_scroll_id" : "DnF1ZXJ5VGhlbkZldGNoMgAAAAAAAABPFlFHZzExcFdnUWJDU0d5bU==", "took" : 55, "timed_out" : false, "_shards" : { "total" : 50, "successful" : 50, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 16692062, "max_score" : 0.0, "hits" : [...1000 data ] } }
优化scroll:在一般场景下,scroll用来取得排序好的大量数据,但很多时候只需要返回数据,这时候可以对scroll进行优化。使用_doc去sort返回的结果不会有排序,此时执行效率最快。
安全模式下示例:
curl -XGET --tlsv1.2 --negotiate -k -u : "https://ip:httpport/myindex-001/_search?scroll=1m&pretty" -H 'Content-Type: application/json' -d' { "query": { "match": { "age": "36" } }, "size":1000, "sort": "_doc" }'
在设置开启scroll时,设置了一个scroll的存活时间,但是如果能够在使用完及时关闭,可以提早释放资源,降低Elasticsearch的负担。
curl -XDELETE --tlsv1.2 --negotiate -k -u : "https://ip:httpport/_search/scroll=1m&pretty" -H 'Content-Type: application/json' -d' { "scroll_id":"DnF1ZXJ5VGhlbkZldGNoMgAAAAAAAABPFlFHZzExcFdnUWJDU0d5bU==" }'
父主题: 数据查询调优