使用ScriptUpdateProcessor将时间(以毫秒为单位)转换为Solr日期格式

时间:2016-09-17 14:16:30

标签: javascript datetime solr solr6

我需要将一个字段,例如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

我该如何解决这个问题?

2 个答案:

答案 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>