我需要将一个字段,例如timestamp_ms(例如:1473794840429)转换为Solr日期格式yyyy-mm-ddThh:mm:ssZ通过Solr ScriptUpdateProcessor转换为长数据类型。
下面是我的solrconfig.xml
<processor name="script" class="solr.StatelessScriptUpdateProcessorFactory">
<str name="script">date-update.js</str>
</processor>
和我的date-update.js是:
function processAdd(cmd) {
doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
var datecheck = doc.getFieldValue("timestamp_ms");
var date1 = new Date(datecheck);
var date2= date1.toUTCString();
doc.setField("tweet_date",date2);
}
-date2以字符串数据类型存储。
当我重新加载核心并发布文档时,我收到以下错误:
org.apache.solr.common.SolrException:RunUpdateProcessor已收到一个AddUpdateCommand,其中包含一个似乎仍包含Atomic文档更新操作的文档,很可能是因为从此updateRequestProcessorChain中明确禁用了DistributedUpdateProcessorFactory
我该如何解决这个问题?
答案 0 :(得分:0)
Atomic updates要求启用Solr Transaction Log,因此首先要确保在solrconfig.xml中设置 updateLog 配置:
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog>
答案 1 :(得分:0)
确保你在js文件中有一个名为finish的函数:
function finish(){
}
并确保在处理器之后的solrconfig.xml中添加以下内容,否则根本不会发生更新:
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
所以你的solrconfig.xml看起来像是:
<updateRequestProcessorChain name="mychain" default="true">
<processor name="script" class="solr.StatelessScriptUpdateProcessorFactory">
<str name="script">last_reaction_date.js</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>