Answering myself, the solution is to update my code as follows:

UpdateRequest request = new UpdateRequest();
request.setParam("update.chain", "skipexisting");

for (Map.Entry<Integer, Integer> user : users.entrySet()) {
    SolrInputDocument document = new SolrInputDocument();
    document.addField("id", user.key().toString());
document.addField("applications", Collections.singletonMap("set", user.value()));

    request.add(document);
    request.process(solrClient);
}

solrClient.commit();

On 29/01/2019 16:27, Chris Wareham wrote:
I'm trying to update records in my Solr core, and have configured a custom update chain that skips updates to records that don't exist:

<updateRequestProcessorChain name="skipexisting">
    <processor class="solr.LogUpdateProcessorFactory" />
    <processor class="solr.SkipExistingDocumentsProcessorFactory">
      <bool name="skipInsertIfExists">true</bool>
      <bool name="skipUpdateIfMissing">true</bool>
    </processor>
    <processor class="solr.DistributedUpdateProcessorFactory" />
    <processor class="solr.RunUpdateProcessorFactory" />
  </updateRequestProcessorChain>

My SolrJ update code is currently:

for (Map.Entry<Integer, Integer> user : users.entrySet()) {
     SolrInputDocument document = new SolrInputDocument();
     document.addField("id", user.key().toString());
    document.addField("applications", Collections.singletonMap("set", user.value()));

     solrClient.add(document);
}

solrClient.commit();

I can't seem to specify the update chain to use and I assume I need to use the UpdateRequest class. However, it's not clear how I go about setting a parameter on the UpdateRequest in order to specify the update chain.

Chris

Reply via email to