Tôi cố gắng để chế tạo thử nghiệm một ứng dụng lập chỉ mục/tìm kiếm trong đó sử dụng rất ổn định nguồn dữ liệu lập chỉ mục (các diễn đàn, mạng xã hội vv), đây là một số các yêu cầu hiệu suất,Làm thế nào để xử lý các thông tin cập nhật rất thường xuyên đến một chỉ số Lucene
rất nhanh kim ngạch khoảng thời gian (bằng cách này tôi có nghĩa là bất kỳ dữ liệu mới (chẳng hạn như một tin nhắn mới trên một diễn đàn) nên có sẵn trong các kết quả tìm kiếm rất sớm (ít hơn một phút))
tôi cần phải loại bỏ các tài liệu cũ một cách khá thường xuyên để đảm bảo rằng các kết quả tìm kiếm không được ghi ngày tháng.
Cuối cùng nhưng không kém phần quan trọng, ứng dụng tìm kiếm cần phải đáp ứng. (Độ trễ vào thứ tự của 100 mili giây, và cần hỗ trợ ít nhất 10 QPS)
Tất cả các yêu cầu tôi đã hiện có thể được đáp ứng w/o sử dụng Lucene (và đó sẽ cho tôi đáp ứng tất cả 1,2 và 3), nhưng tôi dự đoán các yêu cầu khác trong tương lai (như mức độ liên quan tìm kiếm, v.v) mà Lucene làm cho việc triển khai dễ dàng hơn. Tuy nhiên, kể từ khi Lucene được thiết kế cho các trường hợp sử dụng phức tạp hơn nhiều so với cái tôi hiện đang làm việc, tôi gặp khó khăn trong việc đáp ứng các yêu cầu về hiệu năng của tôi.
Dưới đây là một số câu hỏi,
a. Tôi đọc rằng phương thức optimize() trong lớp IndexWriter đắt tiền, và không nên được sử dụng bởi các ứng dụng cập nhật thường xuyên, các lựa chọn thay thế là gì?
b. Để thực hiện cập nhật gia tăng, tôi cần tiếp tục cam kết dữ liệu mới và cũng tiếp tục làm mới trình đọc chỉ mục để đảm bảo rằng dữ liệu mới có sẵn. Đây sẽ ảnh hưởng đến 1 và 3 ở trên. Tôi có nên thử các chỉ mục trùng lặp không? Một số cách tiếp cận phổ biến để giải quyết vấn đề này là gì?
c. Tôi biết rằng Lucene cung cấp phương thức xóa, cho phép bạn xóa tất cả tài liệu khớp với một truy vấn nhất định, trong trường hợp của tôi, tôi cần phải xóa tất cả tài liệu cũ hơn một độ tuổi nhất định, bây giờ một tùy chọn là thêm trường ngày vào mọi và sử dụng tài liệu đó để xóa tài liệu sau. Có thể làm phạm vi truy vấn trên id tài liệu (tôi có thể tạo trường id của riêng tôi vì tôi nghĩ rằng một trong những tạo ra bởi lucene giữ thay đổi) để xóa tài liệu? Có nhanh hơn so với các ngày so sánh được biểu diễn dưới dạng chuỗi không?
Tôi biết đây là những câu hỏi rất cởi mở, vì vậy tôi không tìm câu trả lời chi tiết, tôi sẽ cố gắng xử lý tất cả các câu trả lời của bạn dưới dạng đề xuất và sử dụng chúng để thông báo cho thiết kế của tôi. Cảm ơn! Vui lòng cho tôi biết nếu bạn cần bất kỳ thông tin nào khác.