ページネーションを本質的にサポートしていないため、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. エクスプレスでMySQLデータベースでページネーションを作成する方法は?
- 2. OpenNMSでトポロジを達成する方法
- 3. JQueryでページネーションを作成するには?
- 4. htmlでオートコンプリートを達成する方法は?
- 5. これはWordPressでこれを達成する方法
- 6. xmlスキーマでこれを達成する方法は?
- 7. ASP.Net:リピーターでページネーションを行う方法は?
- 8. 方法はlaravelのページネーションに
- 9. smooksでコピーをリストするlist.listを達成する方法
- 10. "white-space:pre;"の達成方法IE7で?
- 11. テーブルを使わずにテーブルレイアウトを達成する方法は?
- 12. ページネーションURLを取得する方法
- 13. RoRで達成システムを実装する方法
- 14. ワードラップを達成する方法:IE 6.0でブレークワードの動作?
- 15. Cassandra - 最適なリソースで可用性を達成する方法
- 16. Google App Engineで「スケジューリング」を達成する方法
- 17. PostgreSQLで "MySQLクロスデータベースリファレンス"を達成する方法
- 18. 同様の効果でストライクを達成する方法
- 19. KaminariでAjaxページネーションのコントローラとアクションを指定する方法は?
- 20. tcp traversalを達成する成熟した方法はありますか?
- 21. 達成ポイントを1000以上割り当てる方法は?
- 22. ページネーションの実装方法
- 23. このレイアウトを達成する最良の方法は何ですか?
- 24. データベース同期を達成する最良の方法は何ですか?
- 25. 並列無限ループを達成する最良の方法は何ですか?
- 26. WPFで「パーマネントツールチップ」タイプの機能を達成する方法はありますか?
- 27. assertDictEqualを達成する方法値に適用される
- 28. VueJsリミッターとレンジでページネーションを作る方法は?
- 29. ASP.NET、私のwebformでタスクを達成する最も良い方法は?
- 30. 要素でフェーディングの不透明度を達成する方法は?
この記事で承認された答えを確認してください。 [Luceneの4ページネーション] [1] [1]:http://stackoverflow.com/a/24533377/1080485同意 –