我索引了solr,其中一个字段是多值的,它有不同的值,我想将所选的值复制到新字段中。
Field1的值为a,b,c,并希望复制到Field2中,但只能复制值 a和c
数据来自另一个使用dataimport processor =“SolrEntityProcessor”的solr实例
使用solr 4.9
答案 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,但具体的一个取决于您的业务规则实际意味着什么。