Atomic Updates
Atomic Updates is a new feature in Solr 4.0 that allows you to update on a field level rather than on a document level (In previous versions). This means that you can update individual fields without having to send the entire document to Solr with the un-updated fields values. Internally Solr re-adds the document to the index with the updated fields.
Contents
Available Modifiers
set – sets or replaces a particular value, or remove the value if null is specified as the new value.
Note: In the case of multi-valued fields if null is specified on set all the values in the field are removed. See SOLR-3862 add – adds an additional value to a multi-valued field
inc – increments a numeric value by a specific amount
Example syntaxes...
Caveats and Limitations
Stored Values
The core functionality of atomically updating a document requires that all fields in your SchemaXml must be configured as stored="true" except for fields which are <copyField/> destinations -- which must be configured as stored="false". This is because the atomic updates are applied to the document represented by the existing stored field values.
Update Log
An <updateLog/> must be configured in your solrconfig.xml in order for atomic document updates to be used. This is neccessary to ensure that the update instructions are applied to the most recently indexed version of the document -- even if that version has not yet been commited (just like RealTimeGet).
DistributedUpdateRequestProcessorFactory
To improve performance in typical installations, atomic document updates are processed during execution of the DistributedUpdateRequestProcessor. By default all update chains have the DistributedUpdateRequestProcessorFactory inserted into them just prior to the RunUpdateProcessorFactory and most users won't be afected by this implementation detail, but there are two situations where it might affect you...
Using Update Processors that Modify Documents
If you use UpdateRequestProcessors to modify document values when indexing, these should be placed after the DistributedUpdateRequestProcessorFactory in your update chain to ensure they see the fully populated SolrInputDocument with all field values when an atomic document update request is recieved.
Disabling DistributedUpdateRequestProcessorFactory
If you have disabled DistributedUpdateRequestProcessorFactory by adding your own DistributingUpdateProcessorFactory (or NoOpDistributingUpdateProcessorFactory) to your update chain, then atomic document updates are not supported