Solr:如果第一个字段为空或不可用,则从第二个字段复制记录 [英] SOLR: Copy record from second field if 1st field is null or not available
本文介绍了Solr:如果第一个字段为空或不可用,则从第二个字段复制记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
后面跟着这个问题: SOLR: how to copy data to another field with filtered values?
我在Solr中有这些类型的值
"Price":"0.07 AUD"
"Price":"10.00"
"Price":"AUD"
因此,我将上述记录复制到另一个字段中,如下所示
"CustomPrice":0.07
"CustomPrice":10.00
"CustomPrice": 0.0
现在我有了另一个字段PriceSale
,所以如果Price is NULL
我要将PriceSale
复制到CustomPrice
"PriceSale":"45.43 AUD",
"PriceSale":"5.40 AUD",
"PriceSale":"40.30 AUD",
因此,如果"CustomPrice": 0.0
则PriceSale
价格应复制到CustomPrice
中,如下
"CustomPrice":0.07
"CustomPrice":10.00
"CustomPrice": 40.30
如何执行此操作?
推荐答案
下面是您可以尝试让事情为您工作的方法。 实现条件复制字段实现,如下所示。
package mysolr;
import java.io.IOException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
public class ConditionalCopyProcessorFactory extends UpdateRequestProcessorFactory
{
@Override
public UpdateRequestProcessor getInstance(SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor next)
{
return new ConditionalCopyProcessor(next);
}
}
class ConditionalCopyProcessor extends UpdateRequestProcessor
{
public ConditionalCopyProcessor( UpdateRequestProcessor next) {
super( next );
}
@Override
public void processAdd(AddUpdateCommand cmd) throws IOException {
SolrInputDocument doc = cmd.getSolrInputDocument();
Object v = doc.getFieldValue( "Price" );
if( v == "AUD" ) {
Object priceSaleObject = doc.getFieldValue( "PriceSale" );
float priceSale = Float.parseFloat( priceSaleObject.toString() );
doc.addField("CustomPrice", priceSale);
//addField(String name,Object value)
}
// pass it up the chain
super.processAdd(cmd);
}
}
使用此代码,您需要创建名为"ConditionalCopyProcessorFactory.jar"
的JAR。
在solrConfig.xml
中,请添加以下更改。
<lib dir="${solr.install.dir:../../../..}/plugins/" regex="ConditionalCopyProcessorFactory.jar" />
<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
<processor class="mysolr.ConditionalCopyProcessorFactory"/>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.DistributedUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>
这篇关于Solr:如果第一个字段为空或不可用,则从第二个字段复制记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文