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 Luís Portela Afonso <me...@gmail.com> on 2013/08/08 01:22:10 UTC

SOLR Copy field if no value on destination

Hi,

Is possible to copy a value of a field to another if the destination doesn't have value?
An example:
Indexing an rss
The feed has the fields link and guid, but sometimes guid cannot be present in the feed
I have a field that i will copy values with the name finalLink

Now i want to copy guid to finalLink, but if guid has not value i want to copy link. 

My question is, is that possible just with the schema, Processors, solrconfig.xml, and the data-config?

Thanks a lot

Re: SOLR Copy field if no value on destination

Posted by Luís Portela Afonso <me...@gmail.com>.
Oh yeah. Hi have seen that Processor on the book and i was not able to remember. Thanks a lot.
And thanks a lot for your solution. It works :)

On Aug 8, 2013, at 1:52 AM, "Jack Krupansky" <ja...@basetechnology.com> wrote:

> Here's the actual update processor I used (and tested):
> 
> <updateRequestProcessorChain name="first-default-field">
> <processor class="solr.CloneFieldUpdateProcessorFactory">
>   <str name="source">main_s</str>
>   <str name="dest">final_s</str>
> </processor>
> <processor class="solr.CloneFieldUpdateProcessorFactory">
>   <str name="source">backup_s</str>
>   <str name="dest">final_s</str>
> </processor>
> <processor class="solr.FirstFieldValueUpdateProcessorFactory">
>   <str name="fieldName">final_s</str>
> </processor>
> <processor class="solr.LogUpdateProcessorFactory" />
> <processor class="solr.RunUpdateProcessorFactory" />
> </updateRequestProcessorChain>
> 
> -- Jack Krupansky
> 
> -----Original Message----- From: Jack Krupansky
> Sent: Wednesday, August 07, 2013 8:20 PM
> To: solr-user@lucene.apache.org
> Subject: Re: SOLR Copy field if no value on destination
> 
> Sorry, I am unable to untangle the logic you are expressing, but I can can assure you that  JavaScript and the StatelessScriptUpdate processor has full support for implementing spaghetti code logic as tangled as desired!
> 
> Simpler forms of logic can be implemented directly using non-script update processor sequences, but once you start adding conditionals, there is a 50% chance that you will need a script.
> 
> There is a Default Value update processor, but it takes a literal value.
> 
> Hmmm... maybe I’ll come up with a “default-value” script that takes a field name for the default value. IOW, it would copy a specified field to the destination IFF the destination had no value.
> 
> Ahhh... wait... maybe... you could do this with the First Value Update processor:
> 
> 1. Copy guid to FinalLink. (Clone Update processor).
> 2. Copy link to FinalLink. (Clone Update processor).
> 3. First Value Update processor.
> 
> So, step 3 would leave link if guid was not there, or keep guid if it is there and discard link.
> 
> Yes, that should do it.
> 
> This is worth an example in the book! Thanks for the inspiration!
> 
> -- Jack Krupansky
> 
> From: Luís Portela Afonso
> Sent: Wednesday, August 07, 2013 7:22 PM
> To: solr-user@lucene.apache.org
> Subject: SOLR Copy field if no value on destination
> 
> Hi,
> 
> Is possible to copy a value of a field to another if the destination doesn't have value?
> An example:
> a.. Indexing an rss
> b.. The feed has the fields link and guid, but sometimes guid cannot be present in the feed
> c.. I have a field that i will copy values with the name finalLink
> 
> Now i want to copy guid to finalLink, but if guid has not value i want to copy link.
> 
> My question is, is that possible just with the schema, Processors, solrconfig.xml, and the data-config?
> 
> Thanks a lot 


Re: SOLR Copy field if no value on destination

Posted by Jack Krupansky <ja...@basetechnology.com>.
Here's the actual update processor I used (and tested):

<updateRequestProcessorChain name="first-default-field">
  <processor class="solr.CloneFieldUpdateProcessorFactory">
    <str name="source">main_s</str>
    <str name="dest">final_s</str>
  </processor>
  <processor class="solr.CloneFieldUpdateProcessorFactory">
    <str name="source">backup_s</str>
    <str name="dest">final_s</str>
  </processor>
  <processor class="solr.FirstFieldValueUpdateProcessorFactory">
    <str name="fieldName">final_s</str>
  </processor>
  <processor class="solr.LogUpdateProcessorFactory" />
  <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

-- Jack Krupansky

-----Original Message----- 
From: Jack Krupansky
Sent: Wednesday, August 07, 2013 8:20 PM
To: solr-user@lucene.apache.org
Subject: Re: SOLR Copy field if no value on destination

Sorry, I am unable to untangle the logic you are expressing, but I can can 
assure you that  JavaScript and the StatelessScriptUpdate processor has full 
support for implementing spaghetti code logic as tangled as desired!

Simpler forms of logic can be implemented directly using non-script update 
processor sequences, but once you start adding conditionals, there is a 50% 
chance that you will need a script.

There is a Default Value update processor, but it takes a literal value.

Hmmm... maybe I’ll come up with a “default-value” script that takes a field 
name for the default value. IOW, it would copy a specified field to the 
destination IFF the destination had no value.

Ahhh... wait... maybe... you could do this with the First Value Update 
processor:

1. Copy guid to FinalLink. (Clone Update processor).
2. Copy link to FinalLink. (Clone Update processor).
3. First Value Update processor.

So, step 3 would leave link if guid was not there, or keep guid if it is 
there and discard link.

Yes, that should do it.

This is worth an example in the book! Thanks for the inspiration!

-- Jack Krupansky

From: Luís Portela Afonso
Sent: Wednesday, August 07, 2013 7:22 PM
To: solr-user@lucene.apache.org
Subject: SOLR Copy field if no value on destination

Hi,

Is possible to copy a value of a field to another if the destination doesn't 
have value?
An example:
  a.. Indexing an rss
  b.. The feed has the fields link and guid, but sometimes guid cannot be 
present in the feed
  c.. I have a field that i will copy values with the name finalLink

Now i want to copy guid to finalLink, but if guid has not value i want to 
copy link.

My question is, is that possible just with the schema, Processors, 
solrconfig.xml, and the data-config?

Thanks a lot 


Re: SOLR Copy field if no value on destination

Posted by Jack Krupansky <ja...@basetechnology.com>.
Sorry, I am unable to untangle the logic you are expressing, but I can can assure you that  JavaScript and the StatelessScriptUpdate processor has full support for implementing spaghetti code logic as tangled as desired!

Simpler forms of logic can be implemented directly using non-script update processor sequences, but once you start adding conditionals, there is a 50% chance that you will need a script.

There is a Default Value update processor, but it takes a literal value.

Hmmm... maybe I’ll come up with a “default-value” script that takes a field name for the default value. IOW, it would copy a specified field to the destination IFF the destination had no value.

Ahhh... wait... maybe... you could do this with the First Value Update processor:

1. Copy guid to FinalLink. (Clone Update processor).
2. Copy link to FinalLink. (Clone Update processor).
3. First Value Update processor.

So, step 3 would leave link if guid was not there, or keep guid if it is there and discard link.

Yes, that should do it.

This is worth an example in the book! Thanks for the inspiration!

-- Jack Krupansky

From: Luís Portela Afonso 
Sent: Wednesday, August 07, 2013 7:22 PM
To: solr-user@lucene.apache.org 
Subject: SOLR Copy field if no value on destination

Hi, 

Is possible to copy a value of a field to another if the destination doesn't have value?
An example:
  a.. Indexing an rss 
  b.. The feed has the fields link and guid, but sometimes guid cannot be present in the feed 
  c.. I have a field that i will copy values with the name finalLink

Now i want to copy guid to finalLink, but if guid has not value i want to copy link. 

My question is, is that possible just with the schema, Processors, solrconfig.xml, and the data-config?

Thanks a lot

Re: SOLR Copy field if no value on destination

Posted by Jack Krupansky <ja...@basetechnology.com>.
Yes, it is possible to copy from a field to another field that has no value.

In fact, that is the only kind of copy you should be doing unless the field is multivalued.

IOW, copy field is not “replace field”.

-- Jack Krupansky

From: Luís Portela Afonso 
Sent: Wednesday, August 07, 2013 7:22 PM
To: solr-user@lucene.apache.org 
Subject: SOLR Copy field if no value on destination

Hi, 

Is possible to copy a value of a field to another if the destination doesn't have value?
An example:
  a.. Indexing an rss 
  b.. The feed has the fields link and guid, but sometimes guid cannot be present in the feed 
  c.. I have a field that i will copy values with the name finalLink

Now i want to copy guid to finalLink, but if guid has not value i want to copy link. 

My question is, is that possible just with the schema, Processors, solrconfig.xml, and the data-config?

Thanks a lot