Lucene:分页返回重复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lucene:分页返回重复相关的知识,希望对你有一定的参考价值。

我正在努力在Lucene实施分页。目前我已经使用TopDocs实现了它,并且我在很多时候都得到了重复的结果。我究竟做错了什么?这里的索引是页面编号,我从1开始,每次搜索后递增1,resultSize是请求的对象数。

代码:

 Directory directory = FSDirectory.open(path);
  IndexReader indexReader = DirectoryReader.open(directory);
  IndexSearcher indexSearcher = new IndexSearcher(indexReader);
  Query query = new WildcardQuery(new Term("contents", "*" + text + "*"));
  TopScoreDocCollector collector = TopScoreDocCollector.create(9999);
  indexSearcher.search(query, collector);
  TopDocs topDocs = collector.topDocs(index-1, resultSize);
          for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
               Document document = indexSearcher.doc(scoreDoc.doc);
               IndexableField value = document.getField("score");
          }

谢谢。

答案

第一个参数是起始索引,而不是页面。您需要将其乘以每页:

TopDocs topDocs = collector.topDocs((index-1) * perPage, resultSize);

https://lucene.apache.org/core/8_0_0/core/org/apache/lucene/search/TopDocsCollector.html#topDocs-int-int-

以上是关于Lucene:分页返回重复的主要内容,如果未能解决你的问题,请参考以下文章

3.6 Lucene基本检索+关键词高亮+分页

用Lucene searchafter分页,怎样排序

Lucene-Lucene的Field及其分页查询

Lucene系列:LuceneUtils之同步分页

Lucene系列:(11)异步分页

具有相同功能的活动和片段