Cách tiếp cận của bạn thực sự tốt. Một số khuôn khổ phổ biến như La bàn đang thực hiện những gì bạn mô tả ở cấp thấp hơn để tự động phản chiếu các thay đổi chỉ mục đã được thực hiện qua khuôn khổ ORM (xem http://www.compass-project.org/overview.html).
Ngoài những gì bạn mô tả, tôi cũng sẽ thường xuyên lập chỉ mục lại tất cả dữ liệu tồn tại trong MongoDB để đảm bảo cả Solr và Mongo đều được đồng bộ hóa (có thể không lâu như bạn nghĩ, tùy thuộc vào số lượng tài liệu, số lượng trường, số lượng mã thông báo trên mỗi trường và hiệu suất của trình phân tích:Tôi thường tạo chỉ mục từ 5 đến 8 triệu tài liệu (khoảng 20 trường, nhưng trường văn bản ngắn) trong vòng chưa đầy 15 phút với các trình phân tích phức tạp, chỉ cần đảm bảo bộ đệm RAM của bạn không quá nhỏ và không cam kết / tối ưu hóa cho đến khi tất cả các tài liệu đã được thêm vào).
Về hiệu suất, một cam kết rất tốn kém và tối ưu hóa rất tốn kém. Tùy thuộc vào điều gì quan trọng nhất với bạn, bạn có thể thay đổi giá trị của mergefactor trong Solrconfig.xml (giá trị cao cải thiện hiệu suất ghi trong khi giá trị thấp cải thiện hiệu suất đọc, 10 là giá trị tốt để bắt đầu).
Bạn có vẻ sợ thời gian xây dựng chỉ mục. Tuy nhiên, vì lưu trữ chỉ mục Lucene dựa trên phân đoạn, lưu lượng ghi không nên phụ thuộc quá nhiều vào kích thước của chỉ mục (http://lucene.apache.org/java/2_3_2/fileformats.html). Tuy nhiên, thời gian khởi động sẽ tăng lên, vì vậy bạn nên đảm bảo rằng
- có các truy vấn điển hình (đặc biệt là đối với các loại để tải các fieldcache) nhưng không quá phức tạp trong các tham số firstSearcher và newSearcher trong tệp cấu hình solrconfig.xml của bạn,
- useColdSearcher được đặt thành
- false để có hiệu suất tìm kiếm tốt hoặc
- true nếu bạn muốn các thay đổi được thực hiện đối với chỉ mục được tính đến nhanh hơn với cái giá là tìm kiếm chậm hơn.
Hơn nữa, nếu điều đó có thể chấp nhận được đối với bạn nếu dữ liệu có thể tìm kiếm được chỉ vài X mili giây sau khi nó được ghi vào MongoDB, bạn có thể sử dụng tính năng commitWithin của UpdateHandler. Bằng cách này, Solr sẽ ít phải cam kết hơn.
Để biết thêm thông tin về các yếu tố hiệu suất Solr, hãy xem http://wiki.apache.org/solr/SolrPerformanceFactors
Để xóa tài liệu, bạn có thể xóa theo ID tài liệu (như được định nghĩa trong schema.xml) hoặc bằng truy vấn:http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/SolrServer.html