Tự hỏi làm thế nào để đạt được phân trang trong Lucene, vì nó vốn không hỗ trợ phân trang. Tôi về cơ bản cần phải tìm kiếm 'top 10 mục' (dựa trên một số tham số) sau đó 'tiếp theo 10 mục' và như vậy. Và cùng lúc đó tôi không muốn Lucene nhớ lại. Bất kỳ lời khuyên nào sẽ được đánh giá cao. Cảm ơn trước.làm thế nào để đạt được phân trang trong lucene?
Trả lời
Bạn sẽ cần áp dụng cơ chế phân trang của riêng mình, một cái gì đó tương tự như dưới đây.
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));
}
Bạn sẽ thấy rằng việc lặp lại mảng scoreDocs sẽ nhẹ vì dữ liệu chứa trong chỉ mục không thực sự được sử dụng cho đến khi phương thức tìm kiếm được gọi.
Xin lưu ý rằng ví dụ này được viết dựa trên phiên bản Lucene.NET 2.3.2 được sửa đổi một chút, nhưng hiệu trưởng cơ bản sẽ hoạt động đối với bất kỳ phiên bản Lucene gần đây nào.
Tôi đồng ý , kết quả trong Lucene không nặng như kết quả khi truy vấn cơ sở dữ liệu, do đó bạn có thể dễ dàng triển khai phương pháp phân trang tùy chỉnh mà không phải xử lý vấn đề hiệu suất –
Vấn đề ở đây là khi bạn tìm kiếm tập dữ liệu lớn với tìm kiếm số trang cao hơn . Nó giống như bạn tìm kiếm một thứ rồi bỏ qua một phần của tìm kiếm. – Ruwantha
Một phiên bản khác của vòng lặp, tiếp tục với đoạn mã của 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));
}
Tôi sử dụng cách sau để phân trang, có thể giúp ích cho ai đó. Nếu bạn biết một chiến lược tốt hơn, cụ thể là từ quan điểm hiệu suất, vui lòng chia sẻ.
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. Phân trang Lucene với TopScoreDocCollector
- 2. Làm thế nào để đạt được tải chậm với RequireJS?
- 3. Làm thế nào để đạt được vào cuối của TextArea
- 4. Làm thế nào để java.awt.dialog đạt được phương thức?
- 5. Làm thế nào để đạt được mặt nạ UIView động?
- 6. Làm thế nào để đạt được tự động đăng xuất trong php?
- 7. Làm thế nào để đạt được danh sách list.list để sao chép danh sách trong smooks
- 8. Phân trang kết quả tìm kiếm của Lucene
- 9. Làm thế nào để làm cho div cuộn xuống với một trang khi nó đạt đến đỉnh của trang?
- 10. Làm thế nào để có được tất cả các tài liệu của chỉ số lucene?
- 11. Làm thế nào để có được tổng số trận đấu trong Solr/lucene
- 12. Làm thế nào để sử dụng TermVector Lucene 4,0
- 13. Làm thế nào để truy vấn số nguyên, nổi trong lucene và làm thế nào để lưu trữ (NumericComparator)?
- 14. Làm cách nào để sử dụng async/await để đạt được trang không đồng bộ trong biểu mẫu web asp.net?
- 15. Làm thế nào để sử dụng Lucene và JPA?
- 16. Làm thế nào để đạt được chức năng INotifyPropertyChanged cho các giá trị trong một bool []?
- 17. Làm thế nào để tôi đạt được sự khai triển dấu ngã trong C?
- 18. Làm thế nào để đạt được hiệu ứng bóng tối trong WPF
- 19. Làm thế nào để đạt được tham gia bên trong bằng cách sử dụng SQLAlchemy?
- 20. Làm thế nào để đạt được hiệu ứng gấp này trong android?
- 21. Làm thế nào để đạt được assertDictEqual với assertSequenceEqual được áp dụng cho các giá trị
- 22. Làm thế nào để đạt được `git --no-ff --ff-only` mà không được phép
- 23. Facebook đạt được cuộn vô hạn như thế nào?
- 24. làm thế nào để đạt được timespan để chuyển đổi chuỗi?
- 25. Phân loại tài liệu Lucene trong Luke
- 26. Làm thế nào để thực hiện truy vấn được phân trang bằng ScalaQuery?
- 27. Làm thế nào để có được giải thích Lucene cho một SolrDocument với Solrj?
- 28. API Google Maps khiến Tốc độ trang đạt được
- 29. Làm thế nào để đạt được trái loại trừ JOIN bằng cách sử dụng LINQ?
- 30. Làm thế nào để có được Div của trang Master trong trang trong ASP.net?
kiểm tra câu trả lời đã được phê duyệt trong bài viết này: [Lucene 4 Pagination] [1] [1]: http://stackoverflow.com/a/24533377/1080485 –