lucene两个分页操作

   基于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();}}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java连接SQL Server类MyDBase的实现

1、新建Java类MyDBase package MyDB;import java.sql.*;public class MyDBase {Connection Conn;boolean Ecode = false;String ES;ResultSet RS;Statement sql;public MyDBase(String DBServer, String DBName, String DBUser, String DBPwd) {String driverName = "com.…

python typeerror* wants int_python-TypeError:’int’对象是不可迭代的?

我正在实现动态编程算法,但出现此错误.这是我的代码&#xff1a;def shoot(aliens):s[0]*10s[0]0s[1]0for j in xrange(2,len(aliens)):for i in xrange(0,j):s[j]max(s[i] min(aliens[j],fib(j-i))) print s[len(aliens)-1]return s[len(aliens)-1]def fib(n):if n 0:return…

.NET5停止支持,难道就是没前途?

一篇微软官博引发热议&#xff0c;《2022年5月8号.NET5.0将正式停止支持》&#xff0c;此事在.NET5发布时就已经定下来的&#xff0c;文章不过是重申了一下事实&#xff0c;结果却成为某些人眼中的 ”瞎折腾“ ”不靠谱“ ”没前途“&#xff0c;真是无语。技术的更新迭代才是生…

linux之vimdiff命令

1 vimdiff 我们linux系统一般用diff命令,但是感觉不好用,这个时候我们比较文件一般可以用vimdiff命令,这个命令的前提是linux系统要安装vim。 比如比较2个文件 vimdiff file1 file2 比如比较3个文件 vimdiff file1 file2 file3 默认比较是竖着的,比如我们需要横着比较…

unity5.x Translate平移移动 以及GetComponent获取组件

在unity5.x中可以使用 Translate来移动某一个游戏对象&#xff0c;如下&#xff1a; m_cube.transform.Translate(Vector3.up) 此代码使m_cube向上移动&#xff0c;其中&#xff0c;vector3.up是向上移动的意思&#xff0c;直接可以使用vector3或者vector2调用。 在unity5.x…

lintcode 418整数转罗马数字

描述 给定一个整数&#xff0c;将其转换成罗马数字。 返回的结果要求在1-3999的范围内。 说明 https://en.wikipedia.org/wiki/Roman_numeralshttps://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97http://baike.baidu.com/view/42061.htm样例 思路 while循环拆…

linux进程上下文切换,Linux 性能分析总结之 CPU 上下文切换(二)

0x00 前言上一篇笔记中我讲到了&#xff0c;在寻找 CPU 的性能瓶颈的问题的时候&#xff0c;首先会查看整台机器的平均负载是否高&#xff0c;然后再使用 pidstat 等工具判断到底是哪种情况导致的平均负载升高&#xff0c;主要情况有三种&#xff1a;CPU 密集型IO 密集型大量进…

​ArduinoYun教程之ArduinoYun硬件介绍

2019独角兽企业重金招聘Python工程师标准>>> ArduinoYun教程之ArduinoYun硬件介绍 ArduinoYun的电源插座 Arduino Yun有两排插座&#xff0c;这些插座可以按类型分为三类&#xff1a;电源、数字IO和模拟输入。电源部分主要集中在如图1.7所示的部分。 图1.7 电源集中…

Java从零开始(二) Tomacat

什么是Tomacat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器。 ---//快速搭建步骤 第一步&#xff1a;安装JDK和Tomacat 1&#xff0c;安装JDK&#xff1a;官网下载&#xff0c;直接运行jdk-8u31-windows-i586.exe可执行程序&#xff0c;默认安装即可。 2&#xff0c;…

3%7python_Centos7 Python2 升级到Python3

1. 从Python官网到获取Python3的包&#xff0c; 切换到目录/usr/local/srcwget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz2. 使用命令如下命令进行解压缩&#xff1a;xz -d Python-3.7.2.tar.xztar -xf Python-3.7.2.tar3. 在/usr/local路径下创建目录--py…

.NET Nuget包 汉化工具

汉化前汉化后一键汉化附带150M数据库&#xff0c;包含.NET6及EFCore等常用库的翻译数据&#xff0c;可离线运行。使用时建议注册一个百度翻译的账号。注册地址 https://fanyi-api.baidu.com/。注意: 不是“百度云”!!! 不是“百度云”!!! 不是“百度云”!!!是“百度翻译”&…

php 计时器microtime 以及去掉数组重复值array_unique

php计时器可以计算代码执行时间&#xff0c;如下&#xff1a; 计时器 $start_time1 microtime(true); /*中间插入代码*/ $end_time1 microtime(true); echo 执行时间为&#xff1a;.($end_time1-$start_time1). s; 其中在注释那插入代码即可计算时间。 php去掉数组重复值可…

数据结构基础:栈(Stack)

什么是栈&#xff1f; 栈是限制插入和删除只能在同一个位置上进行的表&#xff0c;这个位置就是栈的顶端&#xff0c;对于栈的操作主要有三种形式&#xff1a;入栈(将元素插入到表中)&#xff0c;出栈(将表最后的元素删除&#xff0c;也就是栈顶的元素)&#xff0c;返回栈顶元素…

Apache错误日志提示AH02004: SSL Proxy: Peer certificate is expired

1 、问题 apache错误日志提示如下 AH02004: SSL Proxy: Peer certificate is expired 接下来日志会打印ssl握手失败 然后抓包分析的时候错误提示如下 Level: Fatal, Description: Certificate Unkonw 2 、open ssl命令探测服务器证书日期 我们用open ssl命令探测服务器证书…

【ArcGIS遇上Python】窗体版Python批量处理地理数据--栅格裁剪

一、说明 之前写过用Python代码块处理地理数据的例子,如裁剪、投影、格式转换等,曾想过用C#制作个窗体,嵌入Python代码,今天无意发现Python也能用tKinter构建简单的窗体,眼前一亮,先写个批量裁剪的例子吧。这样就不用对数据路径改来改去了,只需确定元数据路径,掩膜数据…

缺少linux内核,Linux内核缺页

整个缺页异常的处理过程非常复杂&#xff0c;我们这里只简单介绍一下缺页涉及到的内核函数。当CPU产生一个异常时&#xff0c;将会跳转到异常处理的整个处理流程中。对于缺页异常&#xff0c;CPU将跳转到page_fault异常处理程序中&#xff0c;该异常处理程序会调用do_page_faul…

简单好用的Adapter---ArrayAdapter

2019独角兽企业重金招聘Python工程师标准>>> ListView中比较简单但又非常方便的ArrayAdapter。 ArrayAdapter是BaseAdapter的派生类&#xff0c;在BaseAdapter的基础上&#xff0c;添加了一项重大的功能:可以直接使用泛型构造。 先来看一个简单的例子: Overrideprot…

表单数据自动录入_Excel总表录入、分表自动更新,只要数据透视表和一个快捷键就行...

合并多个分表到一个总表中&#xff0c;这样的操作很常见。但&#xff0c;有时候我们也需要反过来&#xff0c;即将一个总表拆分成多个子表&#xff0c;并且在总表中录入/修改数据后&#xff0c;每个分表都可以自动更新数据。如以下资金流动表。除了资金流水&#xff0c;我们还特…

php 字符串打散为数组,用逗号分隔出数组

字符串打散为数组 <?php $str "Hello world. I love php!"; print_r (explode(" ",$str)); ?> 使用explode可以将一段字符串打散成一个数组&#xff0c;不过&#xff0c;explode使用某个字符打乱&#xff0c;例如以上例子&#xff0c;我在explo…

.net Core中如何限制接口请求次数

.net core中如何限制接口请求次数像AspNetCoreRateLimit这种轮子我前面有给大家介绍过&#xff0c;今天就不说了&#xff0c;我们来聊聊背后的原理&#xff0c;欢迎各位大佬指正&#xff01;像我们经常看的一些APi请求接口网站&#xff1a;拿请求国外主要城市的七日接口举例&am…