java - 卢塞恩 : Pagination returning duplicates

标签 java search indexing pagination lucene

我正在致力于在 Lucene 中实现分页。目前我已经使用 TopDocs 实现了它,并且我经常得到重复的结果。我究竟做错了什么?这里的index是页码,我从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-

关于java - 卢塞恩 : Pagination returning duplicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55647561/

相关文章:

list - Haskell:测试列表是否包含特定的 "sublist"

使用遗传算法搜索 3D 位置

java - 搜索文件的最佳方法

php - 文本的索引词

ruby-on-rails-3 - Rails 3 根据登录状态拥有两个不同主页的最佳方式

Java排序一总是在最前面

java - 在java中初始化类时如何检查用户输入错误

java - JSF - 为受限页面实现过滤器

java - 使用 xsl java 将 xhtml 转换为 html

database - 我可以使用 where equals 子句和 orderby 查询 Cloud Firestore 集合吗?