1. scroll 查询
scroll 查询是ES中为了解决一次获取不到全部数据的一种解决方案。
2. 使用姿势
- 第一次查询
GET /ip:port/table/_search/scroll?scroll=1m
{
"query": {
"match_all": {}
}
}
- 第二次查询(第二次查询,可以不加scroll的失效时间)
GET /_search/scroll
{
"scroll id": "*******************"
}
- 第2+n次访问(第三次及之后的查询必须要加scroll的失效时间)
GET /_search/scroll
{
“scroll": "1m",
"scroll id": "*******************"
}
2. Springboot 中用 http 方式实现 scroll 查询
- 首次访问
// 构建URL
private final static String ES_SEARCH_URL = "http://%s:%s/%s/_search?scroll=%sm";
String url = String.format(ES_SEARCH_URL, ip, port, context.getTable(), holdTime)
// 发送URL (scrpit 指的是要执行的 DSL语句)
data = HttpUtils.doPostJson(url, script);
访问后,会得到部分或全部数据和scroll_id.文章来源:https://www.toymoban.com/news/detail-516060.html
- 之后再访问
// 构建URL
String usrModel = "http://%s:%s/_search/scroll";
String url = String.format(usrModel, ip, port);
// 构建body
String script = "{\n"
+ " \"scroll\": \"" + "1m" + "\",\n"
+ " \"scroll_id\": \"" + scrollId + "\"\n"
+ "}";
// 发送请求
data = HttpUtils.doPostJson(url, script);
注意点:
用scroll_id
查询时,如果不带"scroll': "1m"
,即不带失效时间,ES不会返回scroll_id
,之后再用这个scroll_id
查询时可能会出现错误。
正确方式是:每次用scroll_id
查询时,body中也要带上失效时间,每次查询使用上一次查询返回的scroll_id
文章来源地址https://www.toymoban.com/news/detail-516060.html
到了这里,关于ES scroll查询的坑点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!