IT干货网

java之卢塞恩 : Pagination returning duplicates

third_qq_acbf90bbd2dede1d 2024年02月27日 编程设计 54 0

我正在致力于在 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-


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!