Pendekatan Anda sebenarnya bagus. Beberapa kerangka kerja populer seperti Kompas melakukan apa yang Anda gambarkan pada tingkat yang lebih rendah untuk secara otomatis mencerminkan perubahan indeks yang telah dilakukan melalui kerangka kerja ORM (lihat http://www.compass-project.org/overview.html).
Selain apa yang Anda jelaskan, saya juga akan secara teratur mengindeks ulang semua data yang ada di MongoDB untuk memastikan Solr dan Mongo disinkronkan (mungkin tidak selama yang Anda kira, tergantung pada jumlah dokumen, jumlah bidang, jumlah token per bidang, dan kinerja penganalisis :Saya sering membuat indeks dari 5 hingga 8 juta dokumen (sekitar 20 bidang, tetapi bidang teks pendek) dalam waktu kurang dari 15 menit dengan penganalisis kompleks, pastikan saja buffer RAM Anda tidak terlalu kecil dan jangan melakukan/optimasi sampai semua dokumen telah ditambahkan).
Mengenai kinerja, komit itu mahal dan pengoptimalan sangat mahal. Bergantung pada apa yang paling penting bagi Anda, Anda dapat mengubah nilai mergefactor di Solrconfig.xml (nilai tinggi meningkatkan kinerja tulis sedangkan nilai rendah meningkatkan kinerja baca, 10 adalah nilai yang baik untuk memulai).
Anda tampaknya takut dengan waktu pembuatan indeks. Namun, karena penyimpanan indeks Lucene berbasis segmen, throughput penulisan tidak boleh terlalu bergantung pada ukuran indeks (http://lucene.Apache.org/java/2_3_2/fileformats.html). Namun, waktu pemanasan akan bertambah, jadi Anda harus memastikan bahwa
- ada tipikal (terutama untuk pengurutan untuk memuat cache lapangan) tetapi tidak terlalu rumit kueri di parameter FirstSearcher dan newSearcher di file konfigurasi solrconfig.xml Anda,
- useColdSearcher disetel ke
- salah untuk mendapatkan performa penelusuran yang baik, atau
- benar jika Anda ingin perubahan yang dilakukan pada indeks diperhitungkan lebih cepat dengan harga pencarian yang lebih lambat.
Selain itu, jika Anda dapat menerima jika data hanya dapat dicari beberapa X milidetik setelah ditulis ke MongoDB, Anda dapat menggunakan fitur commitWithin dari UpdateHandler. Dengan cara ini Solr harus lebih jarang berkomitmen.
Untuk informasi lebih lanjut tentang faktor kinerja Solr, lihat http://wiki.Apache.org/solr/SolrPerformanceFactors
Untuk menghapus dokumen, Anda dapat menghapus dengan ID dokumen (sebagaimana didefinisikan dalam schema.xml) atau dengan kueri :http://lucene.Apache.org/solr/api/org/Apache/solr/client/solrj/SolrServer.html