`
longgangbai
  • 浏览: 7326108 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

lucene学习笔记九, 关于结果分页

阅读更多

一 ,Hits对象是搜索结果的集合 主要有下面几个方法 [list=1]

  • length() ,这个方法记录有多少条结果返回(lazy loading)
  • doc(n) 返回第n个记录
  • id(in) 返回第n个记录的Document ID
  • score(n) 第n个记录的相关度(积分) 由于搜索的结果一般比较大,从性能上考虑,Hits对象并不会真正把所有的结果全部取回,默认情况下是保留前100个记录(对于一般的搜索引擎,100个记录足够了).
    分页的处理
    100条记录还是太多,我们多半会每页显示20条记录,然后分为若干页显示,对于分页,一般有两个办法
    [list=1]
  • 在session中保留indexreader对象和hit对象,翻页的时候提取内容
  • 不使用session,每次都简单处理为重新查询 lucene推荐先使用第二个办法,即每次都重新查询,这样做的好处是简单方便,不需要考虑session的问题,lucene的查询效率也能保证每次查询时间不长,除非真正有了性能问题,否则不用考虑第一个办法。


    Lucene面向全文检索的优化在于首次索引检索后,并不把所有的记录(Document)具体内容读取出来,而起只将所有结果中匹配度最高的头100条结果(TopDocs)的ID放到结果集缓存中并返回,这里可以比较一下数据库检索:如果是一个10,000条的数据库检索结果集,数据库是一定要把所有记录内容都取得以后再开始返回给应用结果集的。所以即使检索匹配总数很多,Lucene的结果集占用的内存空间也不会很多。对于一般的模糊检索应用是用不到这么多的结果的,头100条已经可以满足90%以上的检索需求。

    如果首批缓存结果数用完后还要读取更后面的结果时Searcher会再次检索并生成一个上次的搜索缓存数大1倍的缓存,并再重新向后抓取。所以如果构造一个Searcher去查1-120条结果,Searcher其实是进行了2次搜索过程:头100条取完后,缓存结果用完,Searcher重新检索再构造一个200条的结果缓存,依此类推,400条缓存,800条缓存。由于每次Searcher对象消失后,这些缓存也访问那不到了,你有可能想将结果记录缓存下来,缓存数尽量保证在100以下以充分利用首次的结果缓存,不让Lucene浪费多次检索,而且可以分级进行结果缓存。

    Lucene的另外一个特点是在收集结果的过程中将匹配度低的结果自动过滤掉了。这也是和数据库应用需要将搜索的结果全部返回不同之处
  • 分享到:
    评论

    相关推荐

      lucene3.5学习笔记

      ### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...

      lucene学习笔记

      **Lucene学习笔记** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单但功能强大的API,用于索引和搜索文本数据,使得开发者可以轻松地在...

      lucene学习资料

      10. **lucene学习笔记 3 .txt** 这是作者的学习笔记,可能包含了个人理解和使用Lucene过程中遇到的问题及解决方案,提供了不同角度的见解和实践经验。 通过这些文档,你可以系统地学习和掌握Lucene的各个方面,从...

      solr学习笔记

      【Solr学习笔记】 Solr,全称为Apache Solr,是一个开源的企业级全文搜索引擎,具有高性能、可扩展性以及易用性等特点。本篇笔记将深入探讨Solr的核心概念、查询参数及其用法,帮助读者掌握如何有效地使用Solr进行...

      jive.chm

      2 jcs学习笔记 3 关于Hibernate的Cache问题 4 用缓冲技术提高JSP应用的性能和稳定性 5 SwarmCache入门 <br> 源代码研究 1 Jive中的全局配置 2 Jive源代码情景分析-index....

      Eclipse开发分布式商城系统+完整视频代码及文档

      │ 淘淘商城第九天笔记.docx │ ├─10.第十天 │ 01.课后回顾.avi │ 02.课程计划.avi │ 03.单点登录系统的处理过程.avi │ 04.创建单点登录系统.avi │ 05.数据校验接口.avi │ 06.用户注册接口.avi │ 07.登录...

      使用java实现solr-7.1.0的api和solr最新支持的sql查询

      doc.addField("title", "Solr学习笔记"); client.add(doc); client.commit(); ``` 对于查询操作,你可以使用`SolrQuery`类来构造查询条件,然后调用`query()`方法执行查询: ```java SolrQuery query = new ...

      Jive资料集

      系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 <br> <br> 数据库设计 1 Jive Forums数据库说明(英文) 2 Jive KB...

    Global site tag (gtag.js) - Google Analytics