Solr:如果第一个字段为空或不可用,则从第二个字段复制记录 [英] SOLR: Copy record from second field if 1st field is null or not available

查看:11
本文介绍了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.0PriceSale价格应复制到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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆