使用ScriptUpdateProcessor将时间以毫秒为单位转换为Solr日期格式
问题描述:
我需要通过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
如何解决这个问题?
答
Atomic updates需要Solr的Transaction Log启用,所以第一件事情是要确保你有一个solrconfig.xml中updateLog配置集:
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog>
答
请确保您有在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>
你能添加你已经在你的solrconfig文件来完成的updateRequestProcessorChain配置? –
您是否在SolrCloud模式下使用Solr? – EricLavault