Lucene笔记13-Lucene的搜索-基于searchAfter的实现

一、使用searchAfter完成分页查询

searchAfter()方法原理是获取上一页的最后一个元素和pageSize,再从最后一个元素的后一个开始取pageSize条数据,这就是需要展示的结果了。searchAfter()方法需要三个参数:ScoreDoc after, Query query, int n。after是上一页的最后一个scoreDoc,query是查询的内容,n是总条数。如果是第一页,scoreDoc传递null,这个需要特别注意。

二、searchAfter的例子

public void searchPageBySearchAfter(String queryString, int pageIndex, int pageSize) {
    try {
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        QueryParser queryParser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
        Query query = queryParser.parse(queryString);
        TopDocs topDocs = indexSearcher.search(query, pageIndex * pageSize);
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        ScoreDoc scoreDoc;
        int last = (pageIndex - 1) * pageSize - 1;
        // 查询第一页的时候scoreDoc传null
        if (last < 0) {
            scoreDoc = null;
        } else {
            scoreDoc = scoreDocs[last];
        }
        topDocs = indexSearcher.searchAfter(scoreDoc, query, pageSize);
        // 分页查询
        for (ScoreDoc sd : topDocs.scoreDocs) {
            Document document = indexSearcher.doc(sd.doc);
            System.out.println(sd.doc + ":" + document.get("path") + " " + document.get("fileName"));
        }
        indexSearcher.close();
    } catch (ParseException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值