2016-09-17 90 views
1

我需要通过Solr ScriptUpdateProcessor将长数据类型的字段say,timestamp_ms(例如:1473794840429)转换为solr日期格式yyyy-mm-ddThh:mm:ssZ。使用ScriptUpdateProcessor将时间以毫秒为单位转换为Solr日期格式

下面是我的solrconfig.xml中

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

和我的日期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 has received an AddUpdateCommand containing a document that appears to still contain Atomic document update operations,​ most likely because DistributedUpdateProcessorFactory was explicitly disabled from this updateRequestProcessorChain

如何解决这个问题?

+0

你能添加你已经在你的solrconfig文件来完成的updateRequestProcessorChain配置? –

+0

您是否在SolrCloud模式下使用Solr? – EricLavault

回答

0

Atomic updates需要Solr的Transaction Log启用,所以第一件事情是要确保你有一个solrconfig.xml中updateLog配置集:

<updateLog> 
    <str name="dir">${solr.ulog.dir:}</str> 
</updateLog> 
0

请确保您有在JS文件被调用函数完成这样的:

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> 
相关问题