2008-12-08 45 views
18

Tôi đang sử dụng Lucene để hiển thị kết quả tìm kiếm trong một ứng dụng web. Tôi cũng đang phân trang tùy chỉnh để hiển thị giống nhau. Kết quả tìm kiếm có thể thay đổi từ 5000 đến 10000 trở lên. Ai đó có thể cho tôi biết chiến lược tốt nhất để phân trang và lưu vào bộ nhớ cache kết quả tìm kiếm không?Phân trang kết quả tìm kiếm của Lucene

+2

Thành viên này dường như được tái đặt câu hỏi tương tự hoặc tương tự lặp đi lặp lại: http: // stackoverflow. com/users/41625/meyahoocomaodzxyowykprbavs5sf701zowgzpc3svjv8 Nhìn vào hồ sơ đăng bài trước khi dành thời gian để trả lời ... –

Trả lời

32

Tôi khuyên bạn không nên lưu kết quả vào bộ nhớ cache, ít nhất là không ở cấp ứng dụng. Chạy Lucene trên một hộp có nhiều bộ nhớ mà hệ điều hành có thể sử dụng cho bộ nhớ cache của tệp sẽ giúp ích.

Chỉ cần lặp lại tìm kiếm với mức chênh lệch khác nhau cho mỗi trang. Caching giới thiệu tính statefulness, cuối cùng, làm suy yếu hiệu suất. Chúng tôi có hàng trăm người dùng đồng thời tìm kiếm chỉ mục hơn 40 triệu tài liệu. Tìm kiếm hoàn thành trong ít hơn một giây mà không sử dụng bộ nhớ đệm rõ ràng.

Sử dụng các đối tượng Hits trở về từ tìm kiếm, bạn có thể truy cập các tài liệu cho một trang như thế này:

Hits hits = searcher.search(query); 
int offset = page * recordsPerPage; 
int count = Math.min(hits.length() - offset, recordsPerPage); 
for (int i = 0; i < count; ++i) { 
    Document doc = hits.doc(offset + i); 
    ... 
} 
+0

Bạn vẫn không gặp vấn đề về hiệu suất? –

+0

Xin chào erickson .. bạn có thể vui lòng cho tôi biết từ đó phiên bản trở đi lucene hỗ trợ phương thức tìm kiếm chỉ lấy 1 đối số truy vấn..và cũng có thể phân loại có thể với giải pháp này. ??? –

+0

@AshaKoshti Forever? Nó đã có trong 1.4.3, phát hành vào năm 2004. Tôi không thể tìm thấy một phiên bản cũ hơn trong kho lưu trữ. Có, có quá tải 'tìm kiếm (Truy vấn, Sắp xếp)' trên 'Searcher'. – erickson

Các vấn đề liên quan