So I think I took the easiest option by creating an UpdateRequestProcessor
implementation (I was unsure of the performance implications and object
model of ScriptUpdateProcessor).  The below
DocumentCreationDetailsProcessorFactory class seems to achieve my aim of
allowing me to sort my Solr Documents by a creation order (To an extent - I
don't think it is exactly the commit order..), though the
auto-increment/sequence/counter functionality is not continuous.

Solr Sort Parameter String:
sort=created_time_stamp_l asc, created_processing_sequence_number_l asc,
created_by_solr_thread_id_l asc, created_by_solr_core_name_s asc,
created_by_solr_shard_id_s asc


Any comments or feedback would be appreciated.

//----------------------------------------------------------------
// UpdateRequestProcessor implementation
//----------------------------------------------------------------
public class DocumentCreationDetailsProcessorFactory extends
UpdateRequestProcessorFactory {

    private static final AtomicLong processingSequenceNumber = new
AtomicLong();

    @Override
    public UpdateRequestProcessor getInstance(SolrQueryRequest req,
SolrQueryResponse rsp, UpdateRequestProcessor next) {
        return new DocumentCreationDetailsProcessor(req, rsp, next,
processingSequenceNumber);
    }
}

class DocumentCreationDetailsProcessor extends UpdateRequestProcessor {

    private final SolrQueryRequest req;

    @SuppressWarnings("unused")
    private final SolrQueryResponse rsp;

    @SuppressWarnings("unused")
    private final UpdateRequestProcessor next;

    private final AtomicLong processingSequenceNumber;


    public DocumentCreationDetailsProcessor(SolrQueryRequest req,
SolrQueryResponse rsp, UpdateRequestProcessor next, AtomicLong
processingSequenceNumber ) {
        super(next);

        this.req = req;
        this.rsp = rsp;
        this.next = next;

        this.processingSequenceNumber = processingSequenceNumber;

    }

    @Override
    public void processAdd(AddUpdateCommand cmd) throws IOException {

        SolrInputDocument solrInputDocument = cmd.getSolrInputDocument();

        solrInputDocument.addField("created_time_stamp_l",
System.currentTimeMillis());

        solrInputDocument.addField("created_processing_sequence_number_l",
processingSequenceNumber.incrementAndGet());

        String solrCoreName = null;
        String solrShardId = null;

        if (req != null
                && req.getCore() != null
                && req.getCore().getCoreDescriptor() != null
                ) {

            SolrCore solrCore = req.getCore();
            CoreDescriptor coreDesc = null;
            CloudDescriptor cloudDesc = null;

            if ( solrCore != null ) {
                solrCoreName = solrCore.getName();
                coreDesc = req.getCore().getCoreDescriptor();

                if (coreDesc != null) {

                    cloudDesc = coreDesc.getCloudDescriptor();
                }

                if (cloudDesc != null) {
                    solrShardId = cloudDesc.getShardId();
                }
            }
        }


        solrInputDocument.addField("created_by_solr_thread_id_l",
Thread.currentThread().getId());
        solrInputDocument.addField("created_by_solr_core_name_s",
solrCoreName);
        solrInputDocument.addField("created_by_solr_shard_id_s",
solrShardId);


        // pass it up the chain
        super.processAdd(cmd);
    }
}
//----------------------------------------------------------------



//----------------------------------------------------------------
//  Added the below for a bit of context
(http://wiki.apache.org/solr/SolrPlugins)
//----------------------------------------------------------------

mkdir /opt/solr/instances/test/collection1/lib
cp /home/user/download/test-solr-plugins-0.0.1.jar
/opt/solr/instances/test/collection1/lib/
chown root:tomcat7 /opt/solr/instances/test/collection1/lib/*

vim /opt/solr/instances/test/collection1/conf/solrconfig.xml
<updateRequestProcessorChain name="mychain">
        <processor
class="com.test.solr.plugins.DocumentCreationDetailsProcessorFactory">
        </processor>
        <processor class="solr.LogUpdateProcessorFactory" />
        <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>


vim /opt/solr/instances/test/collection1/conf/solrconfig.xml
<requestHandler name="/update" class="solr.UpdateRequestHandler">
        <lst name="defaults">
                        <str name="update.chain">mychain</str>
        </lst>
</requestHandler>




--
View this message in context: 
http://lucene.472066.n3.nabble.com/Solr-4-x-auto-increment-sequence-counter-functionality-tp4045125p4045725.html
Sent from the Solr - User mailing list archive at Nabble.com.

Reply via email to