我索引solr其中一個字段是多值的,它有不同的值,我想將選定的值複製到新的字段。On solr如何將選定的值僅從多值字段複製到另一個多值字段?
字段1具有值的a,b,c和要複製到字段2,但只有值 a和c
數據使用dataimport處理器= 「SolrEntityProcessor」
來自solr的的另一實例正在使用的solr 4.9
我索引solr其中一個字段是多值的,它有不同的值,我想將選定的值複製到新的字段。On solr如何將選定的值僅從多值字段複製到另一個多值字段?
字段1具有值的a,b,c和要複製到字段2,但只有值 a和c
數據使用dataimport處理器= 「SolrEntityProcessor」
來自solr的的另一實例正在使用的solr 4.9
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>
非常感謝你!這正是我所期待的。它完美的作品。有人想要使用這個,一些小的更正'
是什麼意思我想? Solr無法閱讀你的想法。那麼,你想跳過一個特定的值,一個特定位置的物品,不符合特定規則的物品嗎?
在所有情況下,您很可能會使用UpdateRequestProcessor,但具體取決於您的業務規則的實際含義。
您是否可以使用RegexTransformer用空字符串替換您不感興趣的值?使用'regex =「^ value $」'和'replaceWith =「」'。 – MatsLindh