You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by OTH <om...@gmail.com> on 2017/02/26 15:11:29 UTC

Auto-generate unique key when adding documents from SolrJ

Hello all,

First of all, I am very new to Solr.

I am using Solr version 6.4.1.  I have a Solr core (non-cloud), where there
is a mandatory unique key field called "id".

I am trying to add documents to the core from Java, without having to
specify the "id" field explicitly; i.e. to have it auto-generated.

I learned that this is possible by including the following information in
the conf/solrconfig.xml file:

> <updateRequestProcessorChain name="add-unknown-fields-to-the-schema">
>     <!-- UUIDUpdateProcessorFactory will generate an id if none is present
> in the incoming document -->
>     <processor class="solr.UUIDUpdateProcessorFactory">
> <str name="fieldName">id</str>
>   </processor>
>     ...
>     <processor class="solr.LogUpdateProcessorFactory"/>
>     <processor class="solr.DistributedUpdateProcessorFactory"/>
>     <processor class="solr.RunUpdateProcessorFactory"/>
>   </updateRequestProcessorChain>


(I did restart the server after adding the above text to the xml file.)

However, when I try to add documents from Java using SolrJ (without
specifying the "id" field), I get the following exception:

> Exception in thread "main"
> org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error
> from server at http://localhost:8983/solr/sales_history: Document is
> missing mandatory uniqueKey field: id


My Java code is like this:

> SolrClient solr = new HttpSolrClient.Builder(SOLR_URL).build();
> SolrInputDocument document = new SolrInputDocument();
> document.addField(..., ...);
> document.addField(..., ...);
> UpdateResponse updateResponse = solr.add(document);


The exception is thrown from the last line above.

Is there any way to add documents from Java and have the uniqueKey field be
auto-generated?


Thank you

Re: Auto-generate unique key when adding documents from SolrJ

Posted by OTH <om...@gmail.com>.
Thanks, great, it's working now!
Omer

On Sun, Feb 26, 2017 at 8:24 PM, Alexandre Rafalovitch <ar...@gmail.com>
wrote:

> It is not enough to declare URP chain, you have to invoke it.
>
> Either by marking it default or by adding the update.chain parameter
> to the request handler (or in initParams) you use to update the
> documents (usually /update). See, for example:
> https://github.com/apache/lucene-solr/blob/master/solr/
> server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml#L837
>
> Regards,
>    Alex.
> ----
> http://www.solr-start.com/ - Resources for Solr users, new and experienced
>
>
> On 26 February 2017 at 10:11, OTH <om...@gmail.com> wrote:
> > Hello all,
> >
> > First of all, I am very new to Solr.
> >
> > I am using Solr version 6.4.1.  I have a Solr core (non-cloud), where
> there
> > is a mandatory unique key field called "id".
> >
> > I am trying to add documents to the core from Java, without having to
> > specify the "id" field explicitly; i.e. to have it auto-generated.
> >
> > I learned that this is possible by including the following information in
> > the conf/solrconfig.xml file:
> >
> >> <updateRequestProcessorChain name="add-unknown-fields-to-the-schema">
> >>     <!-- UUIDUpdateProcessorFactory will generate an id if none is
> present
> >> in the incoming document -->
> >>     <processor class="solr.UUIDUpdateProcessorFactory">
> >> <str name="fieldName">id</str>
> >>   </processor>
> >>     ...
> >>     <processor class="solr.LogUpdateProcessorFactory"/>
> >>     <processor class="solr.DistributedUpdateProcessorFactory"/>
> >>     <processor class="solr.RunUpdateProcessorFactory"/>
> >>   </updateRequestProcessorChain>
> >
> >
> > (I did restart the server after adding the above text to the xml file.)
> >
> > However, when I try to add documents from Java using SolrJ (without
> > specifying the "id" field), I get the following exception:
> >
> >> Exception in thread "main"
> >> org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException:
> Error
> >> from server at http://localhost:8983/solr/sales_history: Document is
> >> missing mandatory uniqueKey field: id
> >
> >
> > My Java code is like this:
> >
> >> SolrClient solr = new HttpSolrClient.Builder(SOLR_URL).build();
> >> SolrInputDocument document = new SolrInputDocument();
> >> document.addField(..., ...);
> >> document.addField(..., ...);
> >> UpdateResponse updateResponse = solr.add(document);
> >
> >
> > The exception is thrown from the last line above.
> >
> > Is there any way to add documents from Java and have the uniqueKey field
> be
> > auto-generated?
> >
> >
> > Thank you
>

Re: Auto-generate unique key when adding documents from SolrJ

Posted by Alexandre Rafalovitch <ar...@gmail.com>.
It is not enough to declare URP chain, you have to invoke it.

Either by marking it default or by adding the update.chain parameter
to the request handler (or in initParams) you use to update the
documents (usually /update). See, for example:
https://github.com/apache/lucene-solr/blob/master/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml#L837

Regards,
   Alex.
----
http://www.solr-start.com/ - Resources for Solr users, new and experienced


On 26 February 2017 at 10:11, OTH <om...@gmail.com> wrote:
> Hello all,
>
> First of all, I am very new to Solr.
>
> I am using Solr version 6.4.1.  I have a Solr core (non-cloud), where there
> is a mandatory unique key field called "id".
>
> I am trying to add documents to the core from Java, without having to
> specify the "id" field explicitly; i.e. to have it auto-generated.
>
> I learned that this is possible by including the following information in
> the conf/solrconfig.xml file:
>
>> <updateRequestProcessorChain name="add-unknown-fields-to-the-schema">
>>     <!-- UUIDUpdateProcessorFactory will generate an id if none is present
>> in the incoming document -->
>>     <processor class="solr.UUIDUpdateProcessorFactory">
>> <str name="fieldName">id</str>
>>   </processor>
>>     ...
>>     <processor class="solr.LogUpdateProcessorFactory"/>
>>     <processor class="solr.DistributedUpdateProcessorFactory"/>
>>     <processor class="solr.RunUpdateProcessorFactory"/>
>>   </updateRequestProcessorChain>
>
>
> (I did restart the server after adding the above text to the xml file.)
>
> However, when I try to add documents from Java using SolrJ (without
> specifying the "id" field), I get the following exception:
>
>> Exception in thread "main"
>> org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error
>> from server at http://localhost:8983/solr/sales_history: Document is
>> missing mandatory uniqueKey field: id
>
>
> My Java code is like this:
>
>> SolrClient solr = new HttpSolrClient.Builder(SOLR_URL).build();
>> SolrInputDocument document = new SolrInputDocument();
>> document.addField(..., ...);
>> document.addField(..., ...);
>> UpdateResponse updateResponse = solr.add(document);
>
>
> The exception is thrown from the last line above.
>
> Is there any way to add documents from Java and have the uniqueKey field be
> auto-generated?
>
>
> Thank you