1

我需要通过 Solr ScriptUpdateProcessor 将长数据类型的字段 say,timestamp_ms(ex: 1473794840429) 转换为 solr 日期格式 yyyy-mm-ddThh:mm:ssZ。

下面是我的 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,其中包含一个似乎仍包含原子文档更新操作的文档,很可能是因为 DistributedUpdateProcessorFactory 已从此 updateRequestProcessorChain 中显式禁用

我该如何解决这个问题?

4

2 回答 2

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>
于 2017-09-05T20:05:17.283 回答
0

原子更新需要启用 Solr事务日志,因此首先要确保在 solrconfig.xml 中设置了updateLog配置:

<updateLog>
  <str name="dir">${solr.ulog.dir:}</str>
</updateLog>
于 2016-09-18T10:38:55.427 回答