2010-10-25 28 views
15

Tôi có một tệp chỉ mục Solr/Lucene khoảng 700 Gb. Các tài liệu mà tôi cần lập chỉ mục đang được đọc trong thời gian thực, khoảng 1000 tài liệu mỗi 30 phút được gửi và cần được lập chỉ mục. Trong kịch bản của tôi, một tập lệnh chạy 30 phút một lần để lập chỉ mục các tài liệu chưa được lập chỉ mục, vì đó là yêu cầu các tài liệu mới nên tìm kiếm càng sớm càng tốt, nhưng quá trình này làm chậm quá trình tìm kiếm.Cách tốt nhất để giữ chỉ mục thời gian thực là gì?

Đây có phải là cách tốt nhất để tôi có thể lập chỉ mục các tài liệu mới nhất hoặc có một số cách khác tốt hơn!

Trả lời

10

Trước tiên, hãy nhớ rằng Solr không phải là công cụ tìm kiếm thời gian thực (chưa). Vẫn còn work để hoàn thành.

Bạn có thể sử dụng master/slave setup, trong đó việc lập chỉ mục được thực hiện trên bản gốc và tìm kiếm trên người nô lệ. Với điều này, chỉ mục không ảnh hưởng đến hiệu suất tìm kiếm. Sau khi commit được thực hiện trên master, buộc slave phải lấy chỉ mục mới nhất từ ​​master. Trong khi chỉ mục mới đang được nhân rộng trên slave, nó vẫn đang xử lý các truy vấn với chỉ mục trước đó.

Ngoài ra, hãy kiểm tra bạn cache warming settings. Hãy nhớ rằng điều này có thể làm chậm các tìm kiếm nếu các cài đặt đó quá hung hăng. Đồng thời kiểm tra các truy vấn được khởi chạy trên new searcher event.

+1

Cập nhật: Solr hiện có (gần) khả năng tìm kiếm thời gian thực. – mt3

+0

@ mt3 link để biết thêm thông tin? – Simon

+1

@Simon Xin lỗi vì đã trả lời chậm. Nó nằm trong thân cây của nhánh Solr/Lucene. http://wiki.apache.org/solr/NearRealtimeSearch – mt3

4

Bạn có thể làm điều này với Lucene dễ dàng. Chia các chỉ mục thành nhiều phần (hoặc chính xác, trong khi xây dựng các chỉ mục, tạo các phần "nhỏ hơn"). Tạo trình tìm kiếm cho từng phần và lưu trữ một tham chiếu đến chúng. Bạn có thể tạo một MultiSearcher ở đầu các phần riêng lẻ này.

Hiện tại, chỉ có một chỉ mục sẽ nhận được tài liệu mới. Thường xuyên, thêm tài liệu vào chỉ mục này, cam kết và mở lại công cụ tìm kiếm này.

Sau khi chỉ mục cuối cùng được cập nhật, bạn có thể tạo lại một người tìm kiếm mới, sử dụng những người tìm kiếm đã mở trước đây.

Do đó, tại bất kỳ thời điểm nào, bạn sẽ chỉ mở lại một người tìm kiếm và điều đó sẽ khá nhanh.

1

^^ tôi làm điều này, với bình thường lucene, không solr, và nó hoạt động thực sự tốt đẹp. Tuy nhiên không chắc chắn nếu có một cách solr để làm điều đó vào lúc này. twitter gần đây đã đi với lucene để tìm kiếm và có hiệu quả thời gian thực tìm kiếm bằng cách chỉ viết cho chỉ mục của họ tại bất kỳ bản cập nhật. chỉ mục của họ nằm hoàn toàn trong bộ nhớ, vì vậy việc cập nhật/đọc chỉ mục là không có hậu quả và xảy ra ngay lập tức, chỉ số lucene luôn có thể được đọc trong khi được viết tới chừng nào chỉ có một người viết tại một thời điểm.

+0

"xảy ra ngay lập tức" -> độ trễ vẫn còn khoảng 10 giây – Karussell

1

Check-out this wiki page

+0

Vui lòng không chỉ bao gồm liên kết trong câu trả lời của bạn. Kéo ra các thông tin liên quan để không phải tất cả mọi người phải bấm qua, và nó vẫn có một số giá trị nếu liên kết bị chết. – agf

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