潇潇雨雨
ES分页方案守则:禁止使用From/Size获取排序数据采用search_after方法,每次只返回排序数据,不返回其他数据,排序数据保存在ES中分页搜索采用search_after方法,根据ES排序索引设置搜索起点,每次返回所有数据优点: 访问速度最快,理论上是单页访问时间秒级,对ES压力小缺点:需要单独一个线程维护排序数据数组,且由于进行排序的索引中ES数据可能被删除,而ES排序索引的数据还未更新,访问数据有较低概率出现单页某条数据被新数据挤出分页界面的概率,有较低概率会出现前一页的最后一条数据出现在本页,本页的最后一条数据出现在下一页的情况。具体实施细节:程序一开始就会在ES中创建一个排序索引,然后采用search_after算法,不断计算要进行分页的索引的排序数据,保存在ES中,此程序是循环进行。然后要访问的时候只需要读取分页索引和对应的分页排序索引的值,就可以得出对应页的数据。Restful过程介绍:获取排序数据的Restful语句第一页:GET test_delete/_search{"size":15,"sort":[
{"randomDouble":"DESC"},
{"randomInt": "DESC"},
{"phone":"DESC"}
],"_source": "{}"}获得最后一项排序数据第N页:GET test_delete/_search{"size":15,"sort":[
{"randomDouble":"DESC"},
{"randomInt": "DESC"},
{"phone":"DESC"}
],"search_after":[
排序数据
],"_source": "{}"}这个过程开一个线程,不断循环更新排序数据获取对应页数据的Restful语句第一页:GET test_delete/_search{"size":15,"sort":[
{"randomDouble":"DESC"},
{"randomInt": "DESC"},
{"phone":"DESC"}
]}第N页:GET test_delete/_search{"size":15,"sort":[
{"randomDouble":"DESC"},
{"randomInt": "DESC"},
{"phone":"DESC"}
],"search_after":[
排序数据
],}对比获取排序数据,该restful语句删除"_source": "{}",以此来获得该页所有数据