2013-06-28 12 views
5

Luceneでこのようなコードがあります。誰かがLuceneとページネーションを作る方法に関するサンプルやヒントを提供できますか?TopScoreDocCollectorを使用したLuceneページ番号

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

ありがとうございました。

+0

pageは0から番号が付けられている)

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

通常適切です:start引数はそれで、起動する必要がありませんどのように多くの「ページ」、そのようなものは、どのように多くの文書を表すことに注意してくださいこの記事で: [Luceneの4ページネーション] [1] [1]:http://stackoverflow.com/a/24533377/1080485 –

答えて

2

TopDocsCollector.topDocs(int)を使用して、結果の特定のページを表すTopDocsを取得できます。承認された答えをチェック

+1

どのように私は 'Sort'オブジェクトと組み合わせるのですか?私はそれを並べ替えてスライスを抽出したいと思います。 –

+1

@ Michael-Oあなたはしません。 'TopScoreDocCollector'を' Sort'で使うのは意味がありません。 TopScoreDocCollectorはトップスコアで明示的にソートします。コレクタを使用する場合は、代わりに['TopFieldCollector'](http://lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/TopFieldCollector.html)を使用してください。 'IndexSearcher.searchAfter(ScoreDoc after、Query query、int n、Sort sort)'を呼び出すだけで、 'IndexSearcher.search(Query query、int n、Sort sort)'を呼び出すことができます。 "after"引数として返された最後の結果を渡します。 – femtoRgon

+0

OK、ありがとう。前述の 'search'メソッドはすでに使用していますが、' searchAfter'はREST APIでそれらを公開しているので、後の呼び出しで 'after'ドキュメントを持っていないので役に立ちません。 'search(query、from、size、sort)'のようなものが必要です。残念なことに 'TopScopeDocC ...'、 'TopFieldC ... 'では' searchAfter'は実行されません。私が見る唯一のオプションは、すべてのScoreDocsを取得し、ページネーションを手動で実装することです。 –

関連する問題