2016-11-23 77 views
0

我索引solr其中一個字段是多值的,它有不同的值,我想將選定的值複製到新的字段。On solr如何將選定的值僅從多值字段複製到另一個多值字段?

字段1具有值的a,b,c和要複製到字段2,但只有值 a和c

數據使用dataimport處理器= 「SolrEntityProcessor」

來自solr的的另一實例

正在使用的solr 4.9

+0

您是否可以使用RegexTransformer用空字符串替換您不感興趣的值?使用'regex =「^ value $」'和'replaceWith =「」'。 – MatsLindh

回答

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"/> 

下面是示例更新的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處理器到updateRequestProcessorChain solrconfig.xml中。

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

非常感謝你!這正是我所期待的。它完美的作品。有人想要使用這個,一些小的更正' updateProcessor.js'應該是'> update-script.js'在solrconfig.xml中並且還有'logger .info(「UpdateScript processed:」+ id);'在'logger.info(「update-script processed:」+ id);'在update-script.js中 – losubuntu

0

是什麼意思我想? Solr無法閱讀你的想法。那麼,你想跳過一個特定的值,一個特定位置的物品,不符合特定規則的物品嗎?

在所有情況下,您很可能會使用UpdateRequestProcessor,但具體取決於您的業務規則的實際含義。

相關問題