lucene实现分页代码

全文检索 Lucene(3) 看完前两篇博客之后,想必大家对于Lucene的使用都有了一个比较清晰的认识了。如果对Lucene的知识点还是有点模糊的话,个人建议还是先看看这两篇文章。 全文检索 Lucene(1) 全文检索 Lucene(2)下面来谈一谈使用Lucene查询的分页机制。分页原理分页就是为了给用户展现一个逻辑性更强,页面更加紧凑的视图效果。相比于数据库实现的分页,Lucene就显得有点逊色了。毕竟数据库是原生支 阅读详情

package cn.csdn.hr.domain;
import java.io.Serializable;

 /**
  *
  * <p>Title: </p>
  * <p>Description: </p>
  * <p>Copyright: Copyright chenhj 2012</p>
  * <p>Company: csdn</p>
  * @author <a href="mailto:chenhj@youkuaiyun.com">Project Group</a>
  */
 public class Post implements Serializable{
  
  /**
   *
   */
  private static final long serialVersionUID = 1L;
  private Integer id;
  private String title;
  private String content;
  public Post() {
   super();
   // TODO Auto-generated constructor stub
  }
  public Post(Integer id, String title, String content) {
   super();
   this.id = id;
   this.title = title;
   this.content = content;
  }
  public Integer getId() {
   return id;
  }
  public void setId(Integer id) {
   this.id = id;
  }
  public String getTitle() {
   return title;
  }
  public void setTitle(String title) {
   this.title = title;
  }
  public String getContent() {
   return content;
  }
  public void setContent(String content) {
   this.content = content;
  }
  @Override
  public String toString() {
   return "Article [id=" + id + ", title=" + title + ", content="
     + content + "]";
  }
  
  

 


}

 

 

 

 

 

 

 

package cn.csdn.hr.util;

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;

public class config {
 private static Directory directory=null;
 private static Analyzer analyzer=null;
 static{
  
  
  try {
   directory=new SimpleFSDirectory(new File("./index"));
   analyzer= new StandardAnalyzer(Version.LUCENE_36);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public static Directory getDirectory() {
  return directory;
 }
 public static Analyzer getAnalyzer() {
  return analyzer;
 }


}

 

 

 

 

 

 

//查询分页

public List<Post> findNowPageInfo(String searchTxt, Integer nowPage,
   Integer pageSize) {
  // TODO Auto-generated method stub
  //声明返回值
  List<Post> posts=new ArrayList<Post>();
  //创建索引的查询对象
  IndexSearcher indexSearcher=null;
  //创建索引的读取对象
  IndexReader indexReader=null;
  
  try {
   //读取的文件
   indexReader=IndexReader.open(config.getDirectory());
   //查找读取的文件
   indexSearcher=new IndexSearcher(indexReader);
   //查询的解析器对象
   QueryParser parser=new QueryParser(Version.LUCENE_36,"title",config.getAnalyzer());
   //查询解析器对象调用解析的方法得到一个查询的对象
   Query query=parser.parse(searchTxt);
   //执行查询
   TopDocs topDocs=indexSearcher.search(query, (nowPage+1)*pageSize);
   //取出结束位置的数据
   int end=Math.min(topDocs.totalHits, (nowPage-1)*pageSize+pageSize);
   for(int i=0;i<topDocs.totalHits;i++){
    Document doc=indexSearcher.doc(topDocs.scoreDocs[i].doc);
    Post post=new Post();
    post.setId(Integer.parseInt(doc.get("id")));
    post.setTitle(doc.get("title"));
    post.setContent(doc.get("content"));
    posts.add(post);
    
    
    
   }
   
   
   
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally {
   if (indexSearcher != null) {
    try {
     indexSearcher.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }

   if (indexReader != null) {
    try {
     indexReader.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
  
  
  return posts;
 }

lucene查询工具类和IndexSearcher分页查询示例 一步一步跟我学习lucene是对近期做lucene索引的总结,大家有问题的话联系本人如蒙加入,不胜感激,大家共同探讨,本人争取每日一博,希望大家持续关注,会带给大家惊喜的 立即下载

相关推荐

Lucene5学习之分页查询

NULL 博文链接:https://iamyida.iteye.com/blog/2193345

Lucene的高级使用之分页

物理分页:limit 逻辑分页:代码 // 分页 @Test public void testPageQuery() throws Exception { // 实际上Lucene本身不支持分页。因此我们需要自己进行逻辑分页。我们要准备分页参数: int pageSize = 2;// 每页条数 int pageNum = 3;...

qq_40208605的博客 670

lucene查询结果集分页代码

在lucene搜索分页过程中,可以有两种方式 一种是将搜索结果集直接放到session中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样虽然避免了内存溢出的可能,但是,每次搜索都要进行一次IO操作,如果大并发访问的时候,你要保证你的硬盘的转速足够的快,还要保证你的cpu有足够高的频率 而我们可以将这两种方式结合下,每次查询都多缓存一部分的结果集,翻页的时候看看所查询的内容是不是在已经存在在缓存当中,如果已经存在了就直接拿出来,如果不存在,就进行查询后,从缓存中读出来. 比如:现在我们有一个搜索结果集 一个有100条数据,每页显示10条,就有10页数据. 安装第一种的思路就是,我直接把这100条数据缓存起来,每次翻页时从缓存种读取 而第二种思路就是,我直接从搜索到的结果集种显示前十条给第一页显示,第二页的时候,我在查询一次,给出10-20条数据给第二页显示,我每次翻页都要重新查询 第三种思路就变成了 我第一页仅需要10条数据,但是我一次读出来50条数据,把这50条数据放入到缓存当中,当我需要10--20之间的数据的时候,我的发现我的这些数据已经在我的缓存种存在了,我就直接存缓存中把数据读出来,少了一次查询,速度自然也提高了很多. 如果我访问第六页的数据,我就把我的缓存更新一次.这样连续翻页10次才进行两次IO操作 同时又保证了内存不容易被溢出.而具体缓存设置多少,要看你的服务器的能力和访问的人数来决定

lucene-分页查询

两种方式 分页查询是很常见的需求,比如要查询第10页,每页10条数据。Lucene 分页通常来讲有两种方式:第一种是把100条数据查出来,然后取最后10条。 优点是快,缺点是对内存消耗大。第二种是把第90条查询出来,然后基于这一条,通过searchAfter方法查询10条数据。 优点是内存消耗小,缺点是比第一种更慢  第一种 private static ScoreDoc[] pageSearc...

litengbin的博客 1209

使用Lucene4.7实现搜索功能,分页+高亮

NULL 博文链接:https://huyana-town.iteye.com/blog/2197476

lucene第一步---6.分页

NULL 博文链接:https://llying.iteye.com/blog/581411

Lucene之分页查询的三种方式-yellowcong

分页查询有三种,一种是直接查询出这页及这页以后的数据,第二种,查询这页以前的最后一条数据,然后再查询这页之后的数据,这种方式还不如第一种方法快,第三种,是根据一个id来进行分页,这种方式适合不变更的数据

6565

SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--dic

注意:共有6部分。 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part1 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part2 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part1 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--dic

Lucene搜索引擎入门以及分页

1、生成索引 目的:索引数据目录,在指定目录生成索引文件 首先导入maven依赖 <!-- lucene核心库 --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</arti...

weixin_42687829的博客 443

嵌入式常见英文2500词总结

嵌入式常见英文总结

qq_28576837的博客 1万+

基于51单片机的多功能智能路灯控制系统(仿真+代码+原理图)

智能路灯控制系统主要由51单片机最小系统+1602显示模块+DS1302时钟模块+光强检测模块+按键输入模块+声光报警模块+LED照明模块+状态检测电路+人体车辆红外检测模块组成。能实现以下功能: 1.能够按键设定系统时间、工作时间、光照阈值 2.工作时间内路灯点亮,凌晨12点后路灯关闭,有人或车通过是,路灯点亮10s 3.非工作时间光照强度低于阈值,路灯点亮 4.能够检测系统工作状态,路灯应亮未亮,声光报警 5.具备手动控制,能够切换自动/手动控制功能

u012759563的博客 8175

JAVA_WEB项目之Lucene检索框架实现增删查改的代码优化以及分页功能实现

上一篇:JAVA_WEB项目之Lucene检索框架入门案例初步给出了一个r

陈楚东的专栏-学编程切记心浮气躁,贵在坚持 3664

差分信号_差分信号的原理及其在PCB的设计

差分线是 PCB 设计中非常重要的一部分信号线,信号处理要求也是相当严谨,今天为大家介绍下差分信号的原理以及其在 PCB 设计中的处理方法。 什么是差分信号 差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的振幅相等,相位相差 180 度,极性相反。在这两根线上传输的信号就是差分...

weixin_31849185的博客 1808

lucene再查询分页搜索和lucene的搜索_基于searchAfter的实现

package com.dhb.search; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.lucene.analysis.standard.StandardAnalyze

西楚小羽的专栏 945

LiveKit 本地部署实战:从零搭建安全实时通信环境(Caddy+HTTPS)

本文详细介绍了如何从零开始搭建LiveKit本地部署环境,结合Caddy服务器实现HTTPS安全通信。通过环境准备、证书生成、服务配置到前端客户端集成的完整流程,帮助开发者快速构建实时音视频应用,特别适合需要安全实时通信的场景。

weixin_29227585的博客 674

【NIPS 2022】时序精选论文07|Non-stationary Transformers: 引入非平稳性信息的平稳化序列预测模型(代码解读附源码)

整体代码框架基本上与传统 Transformer 类似,基本上只有在内嵌的注意力机制模块有区别,因此这里只对关键部分进行讲解,代码整体框架可参考 Transformer。非平稳时序很难预测,尤其对模型泛化性影响很大,试想下推理阶段的数据分布变了,模型很难适应这种变化。,比如很早以前的差分就是一种平稳化操作。序列平稳化能增强数据的可预测性,但这时也会带来一个问题,叫。,通过MLP层进行定义,使得参数可学习,以便于更好的融合到注意力网络中。代码中整体注意力的计算方式与原生Transformer类似,

ViolenceTemper的博客 1490

Lucene3.6的分页查询

分页查询只需要传入每页显示多少条记录,当前是第几页就可以了。   当然是对搜索返回的结果进行分页,并不是对搜索结果的总数量进行分页,因为我们搜索的时候都是返回前n条记录。   例如indexSearcher.search(query, 100);//只返回前100条记录 /** * 对搜索返回的前n条结果进行分页显示 * @p...

胖头鱼 158

Unity与iOS原生交互实战指南

C#(DllImport) → C 接口(extern "C") → Objective‑C / SwiftObjective‑C → UnitySendMessage → C#(GameObject + public 方法)在写.mm文件;在里面写;C# 用声明;调用它,参数就是 string / 数值等;在.mm里做你想做的 iOS 原生操作。在 Unity 里准备一个常驻 GameObject,比如;上面挂一个脚本,写;在 iOS 插件中用;

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1357

Lucene笔记12-Lucene的搜索-复习和再查询分页搜索

一、Lucene的分页搜索 Lucene的分页不像数据库中的limit的方式,而是提供了一种“再查询”的方式。什么是“再查询”呢?就是第一次把所有的数据都取出来,第二次查询再根据需求,从第几条取到第几条,分两步进行查询,所以叫“再查询”。 二、测试代码 package com.wsy; import org.apache.lucene.analysis.standard.Standard...

王劭阳的博客 209

DeepLabv3+改进专栏

🔥【DeepLabv3+改进专栏!探索语义分割新高度】🌟 你是否在为图像分割的精度与效率发愁?📢 本专栏重磅推出:✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化✅ 即插即用模块:ASPP+升级、解码器。

AIcurator的博客 2575

温升试验详解

温升试验是电子设备可靠性验证的重要手段,用于评估器件在正常工作或极限条件下的热稳定性。试验通过测量器件表面或关键点温度与环境温度的差值(ΔT),判断是否存在过热风险。主要依据行业标准,采用热电偶、热像仪等设备测量稳态温度。热阻分析可建立温升与功耗的关系,指导器件选型、PCB热设计和散热结构优化。典型应用包括电源模块和LED电路测试。温升试验通过系统性热分析,能有效提升产品在高负载、高温环境下的可靠性和安全性,对现代小型化、高密度电子设备尤为重要。

硬核科技 1328

lucene 查询+分页+排序

1、定义一个工厂类 LuceneFactory import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.In

happyzwh的专栏 2227

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

lucene的两种分页操作

基于lucene的分页有两种: lucene3.5之前分页提供的方式为再查询方式(每次查询全部记录,然后取其中部分记录,这种方式用的最多),lucene官方的解释:由于我们的速度足够快。处理海量数据时,内存容易内存溢出。 lucene3.5以后提供一个searchAfter,这个是在特大数据量采用(亿级数据量),速度相对慢一点,像google搜索图片的时候,点击更多,然后再出来一批。这种方式就是把数据保存在缓存里面。然后再去取。 以下是再查询部分代码:

千丈之松的专栏 8791

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lucene查询分页总结,利用searchAfter等

首先介绍IndexSearch几个常用方法,其他search方法的具体含义请查找lucene API                      void search(Collector results)//低版本Lucene的search方法                     TopDocs search(Query query,int n)//返回前n条结果

2124

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

lucene的search分页实现

1、将Index的相关独立出来 public class FileIndexUtils { private static Directory directory = null; static { try { directory = FSDirectory.open(new File("d:/lucene/files")); } catch (IOException e) {

uestc_lxp的专栏 505

Lucene的分页查询

分页查询只需要传入每页显示多少条记录,当前是第几页就可以了。   当然是对搜索返回的结果进行分页,并不是对搜索结果的总数量进行分页,因为我们搜索的时候都是返回前n条记录。   例如indexSearcher.search(query, 100);//只返回前100条记录 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1

yingjianxuehun的专栏 3030
上一篇: webService基础详解
日依
博客等级 码龄15年 165粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值