`

十、分页搜索

 
阅读更多

分页查询有两种实现方式:

 

1、再查询

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

 

2、searchAfter(3.5之后才出现的)

    /**
     * 根据页码和分页大小获取上一次的最后一个ScoreDoc
     */
    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);
            //通过最后一个元素搜索下页的pageSize个元素
            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();
        }
    }

分享到:
评论

相关推荐

    web分页代码

    这样搜索引擎能正确索引各页内容,用户也能直接访问特定页。 八、分页库与插件 8. 在实际开发中,可以利用现有的分页库或插件,如jQuery Pagination、Bootstrap Pagination等,它们提供了丰富的样式和配置选项,...

    10经典常用的js分页代码(开发必备)

    "10经典常用的js分页代码(开发必备)"这个资源集合了十个在实际开发中广泛使用的JavaScript分页实现方案。 1. **基础概念**:分页通常涉及到数据的动态加载,通过将大量数据分成若干页,每次只显示一部分,用户可以...

    mysql 分页优化解析

    如果你的数据量有几十万条,用户又搜索一些很通俗的词,然后要依次读最后几页重温旧梦。mysql该很悲壮的不停操作硬盘。 所以,可以试着让mysql也存储分页,当然要程序配合。(这里只是提出一个设想,欢迎大家一起...

    wordpress 文章分页 实用的wordpress长文章分页代码

    那么将近三十款wordpress主题加在一起,页面就非常的长。所以必须要找个方法把长文章进行分页。 在谷歌上搜索了一下,发现有个代码解决的方法非常好。经过亲自使用,确实有效,所以在这里分享出来。 一、添加分页...

    十字滑动示例(上下左右滑动,ViewPager分页)

    通过ViewPager嵌套DirectionalViewPager,实现十字滑动。这种方式在网上应用不多,不容易搜索到。简单说,就是在水平滑动的Tab中,在中间的Tab里加入了垂直滑动的Tab。大家根据个人需求下载。

    用Word的查找替换功能快速给文档分页.docx

    通过利用Word的查找和替换功能,用户可以有效地针对这个模式进行搜索,并在找到的每个实例后插入分页符。 具体步骤如下: 1. 首先,打开Word文档,然后执行“编辑”菜单中的“替换”命令,这将打开“查找和替换”...

    Asp.net MVC 中利用jquery datatables 实现数据分页显示功能

    具体来说,jquery datatables通过其丰富的API,能够轻松地将数据从后端MVC控制器传输到前端视图,并且支持动态数据分页、搜索、排序等操作。 知识点二:jquery datatables插件 jquery datatables是一款基于jquery的...

    MySQL优化案例系列-mysql分页优化

    MySQL分页查询是数据库操作中常见的一种需求,尤其是在处理大量数据时,分页能够...对于特别大的数据集,可以考虑使用第三方搜索引擎如Sphinx或Lucene来减轻MySQL的负担,它们在处理大规模数据的分页查询方面更为高效。

    JS实现php的伪分页

    - 对于需要SEO的页面,谨慎使用伪分页,因为搜索引擎对JavaScript生成的内容可能支持不完全。 伪分页技术通过JavaScript实现数据的分页显示,提供了快速、流畅的用户体验,尽管它也有局限性,但在适用的场景下是一...

    在ASP.NET 2.0中操作数据之四十一:DataList和Repeater数据分页

    比如,在一个在线书店里搜索关于ASP.NET 的书的时候,可能结果会是成百上千,而每页只列出十条。而且结果可以根据title(书名),price(价格),page count(页数),author name(作者)等来排序。我们在分页和...

    网站搜索专业系统设计的十个要点.doc

    9. **优化加载和分页**:为了提高用户体验,搜索结果应分页显示,避免一次性加载大量内容导致页面加载速度变慢。合理的分页策略可以让用户感觉过程更流畅。 10. **反馈与提示**:在搜索过程中,给予用户明确的反馈...

    分享php分页的功能模块

    分页技术允许用户通过翻页查看数据集中的不同部分,常见于搜索引擎的搜索结果和电子商务平台的商品列表。分页功能的核心在于确定数据的总条数、每页显示的条目数以及当前页面位置,然后计算出总页数以及当前页需要...

    data-pagination-and-filtering:数据分页和过滤项目

    过滤允许用户根据特定条件筛选数据,例如按关键词搜索、按日期范围筛选等。在JavaScript中实现数据过滤通常包括以下步骤: 1. **定义过滤条件**:创建一个函数,用于定义过滤规则,如检查数据是否包含指定关键词,...

    django-concertina:Django模板的六角形样式分页

    手风琴分页(也称为钟形曲线分页)可在可能有数十或数百个结果页面的分页页面上提供更快的用户导航和更好的搜索引擎发现。 使用此功能最多可以为您提供13个链接,这些链接始终固定在第一页和最后一页,当前页面两边...

    基于微信小程序实现二十四节气小程序小程序源码分享

    7. **发布与更新**:完成开发后,开发者需要在微信开发者工具中进行预览、调试和上传代码到微信小程序后台,经过审核后,用户就能在微信中搜索并使用这个小程序了。同时,微信提供了版本管理功能,方便开发者发布新...

    ecshop二次开发 47个经典插件开发案例 讲解很详细

    二十七、分享ec搜索出现相关商品的效果滑动效果(模仿百度) 88 二十八、修改注册发送邮件(更新) 94 二十九、新增加一调用编辑器函数 97 三十、简单实现 各个页面都可显示友情链接 97 三十一、Ecshop系统框架分析 ...

    ecshop二次开发 47个经典插件开发案例 讲解很详细 学习参考感谢提供者

    二十七、分享ec搜索出现相关商品的效果滑动效果(模仿百度) 88 二十八、修改注册发送邮件(更新) 94 二十九、新增加一调用编辑器函数 97 三十、简单实现 各个页面都可显示友情链接 97 三十一、Ecshop系统框架分析 ...

Global site tag (gtag.js) - Google Analytics