Elasticsearch search after分页检索案例
The best elasticsearch highlevel java rest api----- bboss
1.准备工作
参考文档《 高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端
2.编写创建索引表和初始化数据方法
创建索引表和初始化数据的组件 DocumentCRUD 实现本文不做重点介绍,请访问 视频教程了解:
/** * 创建索引表并导入测试数据 */ public void initIndiceAndData(){ DocumentCRUD documentCRUD = new DocumentCRUD(); documentCRUD.testCreateIndice();//创建索引表 documentCRUD.testBulkAddDocuments();//导入测试数据 }
3.定义searchAfter dsl配置文件
新建配置文件-esmapper/searchafter.xml
定义searchAfterDSL
<properties> <property name="searchAfterDSL"> <![CDATA[{ #* 以demoId,_uid为searchAfter的分页条件 _uid值格式type#_id 由索引类型加#号加id拼接而成 如果按照多个字段的值做searchAter分页,则用逗号分隔每个值 *# #if($searchAfterId) ## 第一次检索的时候,没有searchAfterId变量,只有做翻页操作的时候才会传递代表分页起点的searchAfterId变量进来 "search_after": [#[demoId],"demo#[searchAfterId,quoted=false,lpad=#]"], #end "size": $pageSize, ##searchAfter分页每页最多显示的记录条数 #* searchAfter分页检索时,必须用翻页字段作为排序字段,这里是demoId和_uid两个字段,如果是多个字段,则按照searchAfter的顺序来设置对应的排序属性 *# "sort": [ {"demoId": "asc"}, {"_uid": "asc"} ], ## 其他检索条件,按照时间范围查询数据,所有数据按照上面的searchAter机制进行分页 "query": { "bool": { "filter": [ { "range": { "agentStarttime": { "gte": #[startTime], "lt": #[endTime] } } } ] } } }]]> </property> </properties>
4.定义实现searchAfter的代码
public void doSeachAfter() throws ParseException { //创建加载配置文件的客户端工具,用来检索文档,单实例多线程安全 ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/searchafter.xml"); Map params = new HashedMap();//定义检索条件,将dsl中需要的参数放置到params中 params.put("pageSize",100); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); params.put("startTime",dateFormat.parse("2017-09-02 00:00:00").getTime()); params.put("endTime",new Date().getTime()); //执行查询,demo为索引表,_search为检索操作action ESDatas<Demo> esDatas = //ESDatas包含当前检索的记录集合,最多1000条记录,由dsl中的size属性指定 clientUtil.searchList("demo/_search",//demo为索引表,_search为检索操作action "searchAfterDSL",//esmapper/demo.xml中定义的dsl语句 params,//变量参数 Demo.class);//返回的文档封装对象类型 //获取结果对象列表,最多返回1000条记录 List<Demo> demos = esDatas.getDatas(); //获取总记录数 long totalSize = esDatas.getTotalSize(); do{ if(demos != null) System.out.println("返回当前页记录数:"+demos.size()); if(demos != null && demos.size() == 100) { //还有数据,则通过searchAfter继续获取下一页数据 String searchAfterId = (String) demos.get(99).getId();//获取最后一条记录的_id值 params.put("searchAfterId", searchAfterId);//设置searchAfterId为分页起点_id值 long demoId = demos.get(99).getDemoId();//获取最后一条记录的demoId值 params.put("demoId", demoId);//设置searchAfterId为分页起点demoId值 esDatas = //ESDatas包含当前检索的记录集合,最多1000条记录,由dsl中的size属性指定 clientUtil.searchList("demo/_search",//demo为索引表,_search为检索操作action "searchAfterDSL",//esmapper/demo.xml中定义的dsl语句 params,//变量参数 Demo.class);//返回的文档封装对象类型 demos = esDatas.getDatas(); } else{//如果是最后一页,没有数据返回或者获取的记录条数少于100结束分页操作 break; } }while(true); System.out.println("总记录数:"+totalSize); }
5.通过junit单元测试用例运行案例
@Test public void testSeachAfter() throws ParseException { DocumentSearchAfter documentSearchAfter = new DocumentSearchAfter(); documentSearchAfter.initIndiceAndData();//创建索引表并导入searchAfter分页测试数据 documentSearchAfter.doSeachAfter();//执行searchAfter分页操作 }
6.参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-after.html
案例对应源码工程:
https://gitee.com/bboss/eshelloword
elasticsearch技术交流群:166471282
elasticsearch微信公众号:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
[Phoenix] 九、分页查询
概述 所谓分页查询就是从符合条件的起始记录,往后遍历“页大小”的行。数据库的分页是在server端完成的,避免客户端一次性查询到大量的数据,让查询数据数据分段展示在客户端。对于Phoenix的分页查询,怎么使用?性能怎么样?需要注意什么?将会在文章中通过示例和数据说明。 二、分页查询 1. 语法说明 [ LIMIT { count } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] Limit或者Fetch在order by子句后转化为为top-N的查询,其中offset子句表示从开始的位置跳过多少行开始扫描。 对于以下的offsset使用示例, 我们可发现当offset的值为0时,查询结果从第一行记录开始扫描
- 下一篇
CDH安装系统环境准备——系统版本和安装包下载地址指南
由于Hadoop深受客户欢迎,许多公司都推出了各自版本的Hadoop,也有一些公司则围绕Hadoop开发产品。在Hadoop生态系统中,规模最大、知名度最高的公司则是Cloudera。接下来的日子里,小编将带大家一起学习搭建CDH。 今天给大家介绍CDH的安装系统环境准备,系统版本和安装包的下载地址指南,具体的教程如下。 系统版本环境: Centos版本:6.7 CDH版本:5.14.0 JDK:jdk-7u80-linux-x64.rpm mysql-connector-java-5.1.46-bin.jar 安装包下载: 1、Centos6.7:http://mirror.nsc.liu.se/centos-store/6.7/isos/x86_64/ 2、JDK1.7: http://www.oracle.com/technetwork/java/java-archive-downloads-javase7-521261.html 3、下载parcel文件(较大,将近2GB),下载centos版本对应的 parcel 和parcel1,el6表示centos 6版本。下载地址:h...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音