Váš přístup je opravdu dobrý. Některé populární rámce, jako je Compass, provádějí to, co popisujete, na nižší úrovni, aby se automaticky zrcadlily změny indexu, které byly provedeny prostřednictvím rámce ORM (viz http://www.compass-project.org/overview.html).
Kromě toho, co popisujete, bych také pravidelně přeindexoval všechna data, která žijí v MongoDB, abych zajistil synchronizaci Solr i Mongo (pravděpodobně ne tak dlouho, jak si myslíte, v závislosti na počtu dokumentů, počet polí, počet tokenů na pole a výkon analyzátorů :Často vytvářím index 5 až 8 milionů dokumentů (asi 20 polí, ale textová pole jsou krátká) za méně než 15 minut pomocí složitých analyzátorů, stačí zajistit vaše vyrovnávací paměť RAM není příliš malá a neprovádějte potvrzení/optimalizaci, dokud nebudou přidány všechny dokumenty).
Pokud jde o výkon, potvrzení je nákladné a optimalizace je velmi nákladná. V závislosti na tom, co je pro vás nejdůležitější, můžete změnit hodnotu mergefactor v Solrconfig.xml (vysoké hodnoty zlepšují výkon zápisu, zatímco nízké hodnoty zlepšují výkon čtení, 10 je dobrá hodnota pro začátek).
Zdá se, že se bojíte doby sestavení indexu. Protože je však úložiště indexů Lucene založené na segmentech, propustnost zápisu by neměla příliš záviset na velikosti indexu (http://lucene.apache.org/java/2_3_2/fileformats.html). Doba zahřívání se však prodlouží, takže byste to měli zajistit
- v parametrech firstSearcher a newSearcher ve vašem konfiguračním souboru solrconfig.xml jsou typické, ale ne příliš složité dotazy,
- použitíColdSearcher je nastaveno na
- false za účelem dosažení dobrého výkonu vyhledávání, nebo
- pravda, pokud chcete, aby byly změny provedené v indexu zohledněny rychleji za cenu pomalejšího vyhledávání.
Navíc, pokud je pro vás přijatelné, pokud se data stanou prohledávatelná pouze několik X milisekund poté, co byla zapsána do MongoDB, můžete použít funkci commitWithin UpdateHandler. Tímto způsobem bude muset Solr provádět méně často.
Další informace o faktorech výkonu Solr najdete na http://wiki.apache.org/solr/SolrPerformanceFactors
Chcete-li odstranit dokumenty, můžete je odstranit podle ID dokumentu (jak je definováno ve schema.xml) nebo pomocí dotazu :http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/SolrServer.html