【问题标题】:Lucene pagination with TopScoreDocCollector使用 TopScoreDocCollector 进行 Lucene 分页
【发布时间】:2013-06-28 15:50:54
【问题描述】:

我有一个这样的 Lucene 代码。有人可以提供有关如何使用 Lucene 进行分页的示例或提示吗?

    Query q = queryParser.parse(useQuery);
TopScoreDocCollector collector = TopScoreDocCollector.create(maxReturn, true);
searcher.search(q, collector);

谢谢。

【问题讨论】:

标签: lucene


【解决方案1】:

您可以使用TopDocsCollector.topDocs(int) 获取代表特定结果页面的TopDocs。请记住,start 参数表示其中应该启动多少个文档,而不是多少“页”,所以类似于:

TopDocs hits = collector.topDocs(maxReturn*page);

通常是合适的(page 从 0 开始编号)

【讨论】:

  • 如何将它与Sort 对象结合起来?我想排序,然后从中提取一个切片。
  • @Michael-O 你没有。将TopScoreDocCollectorSort 一起使用是没有意义的。 TopScoreDocCollector 明确按最高分排序。如果您更喜欢使用收集器,请改用TopFieldCollector。您也可以为第一个查询调用 IndexSearcher.search(Query query, int n, Sort sort),然后为后续页面调用 IndexSearcher.searchAfter(ScoreDoc after, Query query, int n, Sort sort),将返回的最后一个结果作为“after”参数传递。
  • 好的,谢谢。我确实已经使用了提到的search 方法,但是searchAfter 没有帮助,因为我确实使用REST API 公开了它们,并且在后续调用中我没有after 文档。我需要像search(query, from, size, sort) 这样的东西。不幸的是,TopScopeDocC...TopFieldC...searchAfter 都不会。我看到的唯一选择是获取所有ScoreDocs 并手动实现分页。
猜你喜欢
  • 2015-05-08
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 2012-05-02
  • 2013-08-07
  • 1970-01-01
相关资源
最近更新 更多