Din tilgang er faktisk god. Nogle populære frameworks som Compass udfører det du beskriver på et lavere niveau for automatisk at spejle til de indeksændringer, der er blevet udført via ORM frameworket (se http://www.compass-project.org/overview.html).
Ud over det, du beskriver, vil jeg også jævnligt genindeksere alle de data, der findes i MongoDB for at sikre, at både Solr og Mongo er synkroniseret (sandsynligvis ikke så længe, som du måske tror, afhængigt af antallet af dokumenter, antallet af felter, antallet af tokens pr. felt og analysatorernes ydeevne:Jeg opretter ofte indeks fra 5 til 8 millioner dokumenter (omkring 20 felter, men tekstfelter er korte) på mindre end 15 minutter med komplekse analysatorer, bare sørg for din RAM-buffer er ikke for lille og commit/optimer ikke, før alle dokumenter er tilføjet).
Med hensyn til ydeevne er en commit dyr, og en optimering er meget dyr. Afhængigt af, hvad der betyder mest for dig, kan du ændre værdien af mergefactor i Solrconfig.xml (høje værdier forbedrer skriveydeevnen, mens lave værdier forbedrer læseydeevnen, 10 er en god værdi at starte med).
Du ser ud til at være bange for indeksopbygningstiden. Men da Lucene-indekslager er segmentbaseret, bør skrivegennemstrømningen ikke afhænge for meget af størrelsen af indekset (http://lucene.apache.org/java/2_3_2/fileformats.html). Opvarmningstiden vil dog stige, så det bør du sikre dig
- der er typiske (især for sorteringer for at indlæse fieldcaches), men ikke for komplekse forespørgsler i firstSearcher og newSearcher-parametrene i din solrconfig.xml-konfigurationsfil,
- useColdSearcher er indstillet til
- falsk for at få en god søgeydelse, eller
- sandt, hvis du ønsker, at ændringer i indekset skal tages i betragtning hurtigere til prisen for en langsommere søgning.
Desuden, hvis det er acceptabelt for dig, hvis dataene bliver søgbare kun få X millisekunder efter, at de er blevet skrevet til MongoDB, kan du bruge commitWithin-funktionen i UpdateHandler. På denne måde bliver Solr nødt til at forpligte sig sjældnere.
For mere information om Solr-ydelsesfaktorer, se http://wiki.apache.org/solr/SolrPerformanceFactors
For at slette dokumenter kan du enten slette efter dokument-id (som defineret i schema.xml) eller ved forespørgsel :http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/SolrServer.html