ページネーションを本質的にサポートしていないため、Luceneでページネーションを達成する方法が不思議です。私は基本的には「上位10項目」(いくつかのパラメータに基づいて)、次に「次の10項目」などを検索する必要があります。それと同時に、私はLuceneに記憶を欲しがってほしくない。 アドバイスはありがたいです。 ありがとうございます。ルーケンでページネーションを達成する方法は?
答えて
以下のような独自のページングメカニズムを適用する必要があります。
IList<Document> luceneDocuments = new List<Document>();
IndexReader indexReader = new IndexReader(directory);
Searcher searcher = new IndexSearcher(indexReader);
TopDocs results = searcher.Search("Your Query", null, skipRecords + takeRecords);
ScoreDoc[] scoreDocs = results.scoreDocs;
for (int i = skipRecords; i < results.totalHits; i++)
{
if (i > (skipRecords + takeRecords) - 1)
{
break;
}
luceneDocuments.Add(searcher.Doc(scoreDocs[i].doc));
}
あなたはsearcher.Docメソッドが呼び出されるまで、インデックス内に含まれるデータが実際に使用されていないようscoreDocs配列を反復することは、軽量になることがわかります。
この例は、Lucene.NET 2.3.2のわずかに変更されたバージョンに対して書かれていますが、基本的なプリンシパルはLuceneの最新バージョンに対して動作するはずです。
Luceneの結果はデータベースのクエリ結果と同じくらい重くはないので、パフォーマンスの問題に対処することなくカスタムページネーションのメソッドを簡単に実装できます –
ページ番号の大きい検索で大きいデータセットを検索すると検索が遅くなります。それはあなたが物事を検索してから、検索の一部を省略するようなものです。 – Ruwantha
Kaneのコードスニペットに続く別のバージョンのループ。
....................
ScoreDoc[] scoreDocs = results.scoreDocs;
int pageIndex = [User Value];
int pageSize = [Configured Value];
int startIndex = (pageIndex - 1) * pageSize;
int endIndex = pageIndex * pageSize;
endIndex = results.totalHits < endIndex? results.totalHits:endIndex;
for (int i = startIndex ; i < endIndex ; i++)
{
luceneDocuments.Add(searcher.Doc(scoreDocs[i].doc));
}
私は次の方法でページ付けします。誰かを助けるかもしれません。具体的には、パフォーマンスの観点から、より良い戦略が分かっている場合は、共有してください。
public TopDocs search(String query, int pageNumber) throws IOException, ParseException {
Query searchQuery = parser.parse(query);
TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);
int startIndex = (pageNumber - 1) * MyApp.SEARCH_RESULT_PAGE_SIZE;
searcher.search(searchQuery, collector);
TopDocs topDocs = collector.topDocs(startIndex, MyApp.SEARCH_RESULT_PAGE_SIZE);
return topDocs;
}
- 1. HBaseでページネーションを達成する方法は?
- 2. エクスプレスでMySQLデータベースでページネーションを作成する方法は?
- 3. Vuetify - ページネーションの作成方法
- 4. OpenNMSでトポロジを達成する方法
- 5. AngularJSでページネーションを作成する方法は?
- 6. Unityで成果を達成する方法は?
- 7. カテゴリーを選択してページネーションを作成する方法は?
- 8. @ ConditionalOn * ANY *クラスを達成する方法?
- 9. 「アニメーションCollapsingToolbar?」を達成する方法
- 10. XAML UWPでページネーションを作成する方法Gridview
- 11. 制約レイアウトでlayout_constraintEnd_toEndOfをプログラムで達成する方法は?
- 12. のようなステートメントを使用してSQL Server 2008のページネーションを達成するための方法
- 13. JQueryでページネーションを作成するには?
- 14. スプリングブートマイクロサービスでオーケストレーションを達成する方法は?
- 15. HTML/CSSでこのレイアウトを達成する方法は?
- 16. xmlスキーマでこれを達成する方法は?
- 17. これはWordPressでこれを達成する方法
- 18. htmlでオートコンプリートを達成する方法は?
- 19. Interface Builderでこのレイアウトを達成する方法は?
- 20. 自動レイアウトでこのレイアウトを達成する方法は?
- 21. ASP.Net:リピーターでページネーションを行う方法は?
- 22. smooksでコピーをリストするlist.listを達成する方法
- 23. 方法はlaravelのページネーションに
- 24. navbar-static-bottomクラスの達成方法は?
- 25. 次のボタンと前のボタンでページネーションを作成する方法は?
- 26. バックエンドを処理するPHPでページネーションをデザインする方法は?
- 27. "white-space:pre;"の達成方法IE7で?
- 28. XmlSerializerを使用してこれを達成する方法は?
- 29. テーブルを使わずにテーブルレイアウトを達成する方法は?
- 30. Reagentの代議員パターン - それを達成する方法は?
この記事で承認された答えを確認してください。 [Luceneの4ページネーション] [1] [1]:http://stackoverflow.com/a/24533377/1080485同意 –