基于lucene两个分页:

lucene3.5查询方式(每次查询所有记录,然后取当中部分记录。这样的方式用的最多),lucene官方的解释:因为我们的速度足够快。

处理海量数据时。内存easy内存溢出。

   lucene3.5以后提供一个searchAfter,这个是在特大数据量採用(亿级数据量),速度相对慢一点,像google搜索图片的时候,点击很多其它,然后再出来一批。

这样的方式就是把数据保存在缓存里面。然后再去取。
下面是再查询部分代码:

  /*** 这就是先查询全部的数据。然后去分页数据* 注意 这样的方式处理海量数据的时候,easy内存溢出* @param query* @param pageIndex--第几页* @param pageSize--每页显示多少数据*/public void searchPage(String query,int pageIndex,int pageSize) {try {Directory dir = FileIndexUtils.getDirectory();IndexSearcher searcher = getSearcher(dir);QueryParser parser = new QueryParser(Version.LUCENE_35,"content",new StandardAnalyzer(Version.LUCENE_35));Query q = parser.parse(query);TopDocs tds = searcher.search(q, 500);//注意 此处把500条数据放在内存里。ScoreDoc[] sds = tds.scoreDocs;int start = (pageIndex-1)*pageSize;int end = pageIndex*pageSize;for(int i=start;i<end;i++) {Document doc = searcher.doc(sds[i].doc);System.out.println(sds[i].doc+":"+doc.get("path")+"-->"+doc.get("filename"));}searcher.close();} catch (org.apache.lucene.queryParser.ParseException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

最后我们来看下使用SearcherAfter进行分页的方式,代码例如以下(lucene3.5之前 不支持该方法):

    /*** 依据页码和分页大小获取上一次的最后一个scoredocs* @param pageIndex* @param pageSize* @param query* @param searcher* @return* @throws IOException*/private ScoreDoc getLastScoreDoc(int pageIndex,int pageSize,Query query,IndexSearcher searcher) throws IOException {if(pageIndex==1)return null;//假设是第一页就返回空int num = pageSize*(pageIndex-1);//获取上一页的最后数量TopDocs tds = searcher.search(query, num);return tds.scoreDocs[num-1];}public void searchPageByAfter(String query,int pageIndex,int pageSize) {try {Directory dir = FileIndexUtils.getDirectory();IndexSearcher searcher = getSearcher(dir);QueryParser parser = new QueryParser(Version.LUCENE_35,"content",new StandardAnalyzer(Version.LUCENE_35));Query q = parser.parse(query);//获取上一页的最后一个元素ScoreDoc lastSd = getLastScoreDoc(pageIndex, pageSize, q, searcher);//通过最后一个元素去搜索下一页的元素TopDocs tds = searcher.searchAfter(lastSd,q, pageSize);for(ScoreDoc sd:tds.scoreDocs) {Document doc = searcher.doc(sd.doc);System.out.println(sd.doc+":"+doc.get("path")+"-->"+doc.get("filename"));}searcher.close();} catch (org.apache.lucene.queryParser.ParseException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

lucene两个分页操作相关推荐

  1. lucene的两种分页操作

    2019独角兽企业重金招聘Python工程师标准>>> lucene的两种分页操作 博客分类: 搜索引擎,爬虫 java 基于lucene的分页有两种: lucene3.5之前分页提 ...

  2. bootstrap layui 两种分页的实现

    最近做的项目中后台界面用的layui框架,前台界面用的是boostrap框架,这就导致我在做分页的过程中要考虑前台两种分页的动态实现,现在我已经爬出这个坑了,哈哈,给大家分享一下,写的不好的地方请大家 ...

  3. 目前用到的两个分页存储过程:

    目前用到的两个分页存储过程: 第一个,取得数据总行数 Code set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [sq8re ...

  4. 单一窗口关区备案_【干货】上海国际贸易单一窗口货物申报对接版(信天翁)“两段准入” 操作手册...

    上海国际贸易单一窗口货物申报对接版 (信天翁)"两段准入" 操作手册 什么是"两段准入"? 2019年10月16日,海关总署发布<关于分段实施准入监管 加 ...

  5. 神超重回两只手操作时代?霸哥最强上单要被抢,战场在LOL手游

    有一直关注LOL圈内信息玩家都知道,现在云顶之弈板块一哥神超,其实前身就是一名职业选手,人气和实力都是属于顶级的,在S3时期一手鳄鱼上单,让他直接登上了国产最强上单的称号,当时使用的鳄鱼单挑基本没人能 ...

  6. SQL SERVER两种分页的存储过程介绍

    由于现在很多的企业招聘的笔试都会让来招聘的写一个分页的存储过程,有的企业甚至要求应聘者用两种方式实现分页,如果没有在实际项目中使用过分页,那么很多的应聘者都会出现一定的问题,下面介绍两种分页的方法. ...

  7. 适合千万数据查询分页操作的一个通用存储过程

    适合千万数据查询分页操作的一个通用存储过程 一.引言                最近上班比较忙,所以就很少写东西了,MongoDB系列的文章也要拖后了,没办法,工作第一,没工作就没饭吃了.今天正好 ...

  8. ajax实现分页操作

    利用ajax请求数据的特点,来实现分页操作. 主要是利用ajax进行后端分页,当点击对应的页数,ajax请求数据库对应的数据,后端分页可以降低前端请求数据的压力,页面渲染起来比较流畅. 根据后台请求的 ...

  9. ele-ui 里面的分页操作

    html: <pagination class="pagination" :pages="pages" @changePage="changeP ...

最新文章

  1. ubuntu windows 终端清理、清空 屏幕命令 清屏
  2. 计算机考研专业课资料百度云,2020年考研专业课【初试】资料清单
  3. 推荐一款免费的数据库管理工具,比 Navicat 还要好用,功能还很强大
  4. 英文语句处理(空格处理)
  5. esp32搭建文件服务器,ESP32入门示例 - SD卡Web服务器
  6. javascript: 数组
  7. 【LeetCode】【HOT】39. 组合总和(回溯)
  8. php strrew,友价域名交易系统nginx环境的伪静态规则
  9. 【建模算法】基于遗传算法求解TSP问题(Python实现)
  10. 抖音sdk,抖音开发api接口
  11. C中printf()的常用输出
  12. Druid实战--摄入数据规范Ingestion Spec
  13. 区块链基本概念和名词解释
  14. 【题解】【循环】幂级数求和
  15. HTML基础--CSS样式表(二)
  16. FUEL: Fast UAV Exploration using Incremental Frontier Structure and Hierarchical Planning
  17. 微信小程序支付功能后台PHP实现
  18. 《数字图像处理》学习笔记(四)--混合空间增强法(待修改)
  19. Linux下poky编译1
  20. 蒟阵P3390 【模板】矩阵快速幂

热门文章

  1. 关于移动端的一些tip
  2. JavaScript对UNIX时间戳的转换
  3. 动态规划(五) 最大连续子序列和(Maximum Continuous Subsequence Sum)
  4. c++11编码规范 NULL还是nullptr
  5. Ubuntu下修改file descriptor
  6. android java 指针,opencv android:向我的代码中添加cascade分类器后出现空指针异常
  7. php ajax取不到值,PHP没有从Ajax获取值
  8. 检测机安装mysql_centos安装mysql的正确方法
  9. Qt QProces的使用
  10. 电脑知识:Win10系统把系统盘的软件移到D盘的简单方法