- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
站内搜索Lucene分页实现
站内搜索Lucene分页实现摘要:在Lucene的开发中都会遇到搜索结果分页的问题,但是其没有直接可利用的函数。这就需要我们自己去完成实现。本文就主要介绍常用的Lucene分页方法
Abstract:In the development of Lucene will meet the question of search results page, but Lucene have not functions of directly available. This needs us to finished. The purpose of this article is to find a solution to the problem.
关键词:Lucene 搜索结果 分页
Key words: Lucene Search results paging
一、简介
常用数据库中都提供一些函数或命令,通过简单的组合,就可以实现分页功能。例如:
SQL Server中的Top命令:select * from (select top 20 * from (select top 40 * from 表 order by 主键 desc) T order by 主键 asc) N order by主键desc
MySQL中的Limit命令:select * from表order by主键 desc Limit 40,21
而在Lucene中没有这样的函数或命令,我们只能寻求其他的方式。而在实际运用中,常用的分页有以下四种方式:
1、依赖于Session的翻页:将搜索的结果存储于Session中,用户在翻页时就直接从Session中读取结果集,然后找到对应的数据并显示
优点:这种方式最简单,最直接,不需要什么算法,一次性读取所有结果,并按需要显示
缺点:由于Session对象是存储在服务器端,因此,当检索结果过多,或用户并发数太大时,就会造成服务器的内存溢出,进而直接造成服务器宕机
2、多次查询:每次翻页都对索引进行重新检索,然后将当前页的数据显示
优点:这种方式改善Session内存占用的问题,它是占用服务器内存最小的一种方式,并且支持多线程的并发检索
缺点:检索是对磁盘索引的一层I/O读取过程,当多线程或多并发时,其效率会明显降低。虽然Lucene专门针对检索算法进行了优化,但这种频繁的I/O过程,无论怎样也是无法避免的
3、缓存+多次查询:采用纯粹的Session方式的查询会造成内存的溢出,而采用完全状态的查询方式,又会出现磁盘I/O太过频繁的问题,以致降低了效率。在实践中,通常使用二者的结合方式,吸收两者的优点,来达到最佳的查询效果,即在Session中缓存当前页和前后几页的部分数据,先从Session中读取数据,如果不存在,再进行Lucene搜索。这样既减少服务器内存的使用,又减少磁盘I/O的次数。二者的结合实现方式:如下图
4、缓存+多次查询+数据库:这种方式只建立在“缓存+多次查询”的基础上,用数据库来缓解一部分访问压力。只索引主键和必要的字段,当用户检索时,读出数据主键,利用主键去数据库读取显示值。这样不仅减少索引的物理存储大小,减少Lucene I/O扫描大小,并减少检索结果在缓存中占用的空间。从而增加更多可用内存,加快检索的速度
二、方法的实现
我们理解了Lucene的几种分页方式,那么怎样在实际的项目中应用呢?在以下的例子中慢慢展现。这里我根据“电子商务网站”的特性,采用了第四种方式,即“缓存+多次查询+数据库”
1、开发环境:Windows 2003系统、IIS、Net 2.0框架、SQL Server 2005数据库、中科院分词、Lucene .Net包、VS2005开发工具
2、建立搜索参数实体类SeachParametersInfo:搜索的条件会很多,利用实体类传递参数可以使代码扩展性更好、更整洁。属性:
Page:int。当前页,可读写
PageSize:int。页面大小,可读写
Keyword:string。关键字,可读写
3、建立搜索结果集实体类SeachSessionInfo:把搜索的结果集以实体类的方式存放到缓存中,可以更方便获得数据和相应的参数。属性:
IsData:bool。是否含有数据,只读
TotalCount:int。总条数,可读写
TotalPage:int。总页数,可读写
ListID:List。数据ID列表。可读写。方便去数据库中读取数据(特殊处理如下代码)
PID:string。数据ID值字符串,只读。数据ID之间用“,”分割
您可能关注的文档
最近下载
- iMeter 7A用户使用说明书V1.0.pdf VIP
- 四川能投发展建设有限公司2025年招聘笔试模拟试题及答案解析.docx VIP
- 四川能投发展建设有限公司2025年招聘笔试参考题库附答案解析.docx VIP
- 普外科PDCA案例——降低住院患者抗菌药物使用强度.ppt VIP
- 四川能投发展建设有限公司2025年招聘笔试备考试题及答案解析.docx VIP
- 人教版(2019)高中英语选择性必修第二册 Unit2 Using Language(2) 名师教学设计.docx VIP
- 四川能投发展建设有限公司2025年招聘笔试备考题库及答案解析.docx VIP
- 新人教部编版小学语文五年级上册(全册)教案(2024年).pdf VIP
- 《新时代大学生创新创业基础》全套教学课件.pptx
- 新能源汽车教学课件下载.ppt VIP
文档评论(0)