博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElasticSearch High Level REST API【3】Scroll 滚屏
阅读量:5172 次
发布时间:2019-06-13

本文共 2485 字,大约阅读时间需要 8 分钟。

ES中提供了 FROM/SIZE 分页,但这种分页有性能瓶颈。

Scroll会以间隔时间滚屏的方式返回全部的查询数据,可以作为数据量很大的情况下,分页的一个替代方案

完整的示例如下:

public void scroll(){        RestHighLevelClient client = elasticClient.getRestHighLevelClient();        //初始化scroll        final Scroll scroll = new Scroll(TimeValue.timeValueMinutes(1L)); //设定滚动时间间隔        SearchRequest searchRequest = new SearchRequest();        searchRequest.scroll(scroll);        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();        searchSourceBuilder.query(matchAllQuery());        searchSourceBuilder.size(5); //设定每次返回多少条数据        searchRequest.source(searchSourceBuilder);        SearchResponse searchResponse = null;        try {            searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);        } catch (IOException e) {            e.printStackTrace();        }        String scrollId = searchResponse.getScrollId();        SearchHit[] searchHits = searchResponse.getHits().getHits();        System.out.println("-----首页-----");        for (SearchHit searchHit : searchHits) {            System.out.println(searchHit.getSourceAsString());        }        //遍历搜索命中的数据,直到没有数据        while (searchHits != null && searchHits.length > 0) {            SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);            scrollRequest.scroll(scroll);            try {                searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);            } catch (IOException e) {                e.printStackTrace();            }            scrollId = searchResponse.getScrollId();            searchHits = searchResponse.getHits().getHits();            if (searchHits != null && searchHits.length > 0) {                System.out.println("-----下一页-----");                for (SearchHit searchHit : searchHits) {                    System.out.println(searchHit.getSourceAsString());                }            }        }        //清除滚屏        ClearScrollRequest clearScrollRequest = new ClearScrollRequest();        clearScrollRequest.addScrollId(scrollId);//也可以选择setScrollIds()将多个scrollId一起使用        ClearScrollResponse clearScrollResponse = null;        try {            clearScrollResponse = client.clearScroll(clearScrollRequest,RequestOptions.DEFAULT);        } catch (IOException e) {            e.printStackTrace();        }        boolean succeeded = clearScrollResponse.isSucceeded();        System.out.println("succeeded:" + succeeded);    }

 

转载于:https://www.cnblogs.com/chentop/p/10296517.html

你可能感兴趣的文章
动态将ASPX生成HTML网页并将网页导出PDF
查看>>
Find Backpacker Jobs in Australia
查看>>
面试题:return和finally执行
查看>>
Heroku第三方服务接入指南(二)
查看>>
MSRA专访摘要
查看>>
团队作业4
查看>>
随手一写,简单的四则运算练习
查看>>
DualGan
查看>>
Burp Suite详细使用教程-Intruder模块详3
查看>>
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
查看>>
Android开发技术周报 Issue#38
查看>>
win10 桌面设置为远程桌面
查看>>
多人操作sqlite3数据库冲突问题解决方法
查看>>
String,StringBuffer,StringBulilder之间的区别
查看>>
第四次团队作业--选题
查看>>
记录专用
查看>>
一句实现jquery导航栏
查看>>
每日英语:The Invasion of the Online Tutors
查看>>
成员函数指针有多态的效果吗?
查看>>
从零开始学 Web 之 Ajax(五)同步异步请求,数据格式
查看>>