在solr上,我如何才能将选定值仅从多值字段复制到另一个多值字段?

时间:2016-11-23 10:11:00

标签: solr

我索引了solr,其中一个字段是多值的,它有不同的值,我想将所选的值复制到新字段中。

  

Field1的值为a,b,c,并希望复制到Field2中,但只能复制值   a和c

数据来自另一个使用dataimport processor =“SolrEntityProcessor”的solr实例

使用solr 4.9

2 个答案:

答案 0 :(得分:0)

StatelessScriptUpdateProcessorFactory,允许在更新请求期间使用作为脚本实现的更新处理器 当我们建立索引时,我们得到多值 Field1 ,然后将我们需要的值复制到另一个字段 Field2
[托管架构]

<field name="Field1" type="custom" multiValued="true" indexed="true" stored="true"/>
  <field name="Field2" type="custom" multiValued="true" indexed="true" stored="true"/>

以下是 update-script.js 示例。

function processAdd(cmd) {
    doc = cmd.solrDoc;
    id = doc.getFieldValue("id");
    Field1 = doc.getFieldValues("Field1");
    logger.info("Size : "+Field1.size());
    for(i = 0; i < Field1.size();i++){
        if(Field1.get(i).equals("a") || Field1.get(i).equals("c")){
            doc.addField("Field2", Field1.get(i));
        }
    }
    logger.info("UpdateScript processed: "+id);

}
function processDelete(cmd) {
  // no-op
}

function processMergeIndexes(cmd) {
  // no-op
}

function processCommit(cmd) {
  // no-op
}

function processRollback(cmd) {
  // no-op
}

function finish() {
  // no-op
}

将StatelessScriptUpdateProcessorFactory处理器添加到solrconfig.xml中的updateRequestProcessorChain。

<processor class="solr.StatelessScriptUpdateProcessorFactory">
   <str name="script">update-script.js</str>
 </processor>

答案 1 :(得分:0)

这是什么意思我想要?索尔无法读懂你的想法。那么,您是否想要跳过特定值,特定位置的项目,任何与特定规则不匹配的项目?

在所有情况下,最有可能的情况是,您将使用UpdateRequestProcessor,但具体的一个取决于您的业务规则实际意味着什么。