在 Solr 的文档中未定义last_modified字段时设置字段



我正在使用Solr 4.6示例的SimplePostTool将文档从文件系统导入Solr。一切都没问题,但仅当原始文档具有元数据时,才会填充字段last_modified。如果该字段不存在,则 Solr 提取器将该字段留空。

我尝试修改 SimplePostTool 以使用文件系统修改日期设置此字段,但是当我尝试从元数据导入已经具有last_modified字段的文件时出现此错误:

430584 [qtp1214238505-16] ERROR org.apache.solr.core.SolrCore  – 
  org.apache.solr.common.SolrException: ERROR: 
  [doc=4861976] multiple values encountered for non multiValued field 
  last_modified: [2013-12-22T14:03:10.000Z, 2013-07-02T11:29:20.000Z]

正在考虑使用自定义字段作为文件系统日期,但就我而言,元数据日期(如果最好在可用时)使用。有什么方法可以在导入时合并它们吗?

谢谢!

您可以在架构中设置默认值。这样的事情应该有效:

<field name="my_date" type="date" indexed="true" stored="true" multiValued="false" default="NOW" />

字段类型定义:

<fieldType name="date"     class="solr.TrieDateField" sortMissingLast="true" omitNorms="true"/>

在创建文档时,solr将所有输入作为文本,然后根据给定的数据类型进行验证,因此接受任何形式的有效日期格式都可以与solr一起使用。对于当前时间任何默认值

问候

拉贾特

我终于解决了创建自定义更新请求处理器的问题,如下所述:http://wiki.apache.org/solr/UpdateRequestProcessor

我的处理器如下:

package com.mycompany.solr;
import java.io.IOException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
public class LastModifiedMergeProcessorFactory 
   extends UpdateRequestProcessorFactory {
  @Override
  public UpdateRequestProcessor getInstance(SolrQueryRequest req, 
       SolrQueryResponse rsp, UpdateRequestProcessor next) {
    return new LastModifiedMergeProcessor(next);
  }
} 
class LastModifiedMergeProcessor extends UpdateRequestProcessor {
  public LastModifiedMergeProcessor(UpdateRequestProcessor next) {
    super(next);
  }
  @Override
  public void processAdd(AddUpdateCommand cmd) throws IOException {
    SolrInputDocument doc = cmd.getSolrInputDocument();
    Object metaDate = doc.getFieldValue( "last_modified" );
    Object fileDate = doc.getFieldValue( "file_date" );
    if( metaDate == null && fileDate != null) {
        doc.addField( "last_modified", fileDate );
    }
      // pass it up the chain
      super.processAdd(cmd);
    }   
  }

其中file_date是我在导入时使用文件修改日期设置的字段。

相关内容

  • 没有找到相关文章

最新更新