如何索引没有日期和日期的日期在Apache Solr的时间

时间:2018-03-07 13:58:33

标签: search indexing solr lucene solrj

在我的数据库中,日期类似于1973-01。它们存储为字符串值。如果我必须使用Apache Solr对其进行索引,那么我该怎么做呢。

我在schema.xml中编写了以下内容:

<field name="pubdate" type="tdate" indexed="true" stored="true" multiValued="false" />

我还更改了1973-01Z等所有日期。但我仍然收到错误:

org.apache.solr.common.SolrException: Invalid Date in Date Math String:'1973-01Z'

我相信Solr只接受1995-12-31T23:59:59Z

之类的日期

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

在solrconfig.xml中,您可以在ParseDateFieldUpdateProcessorFactory的帮助下定义更新请求处理程序可以在updateRequestProcessorChain中处理的日期格式:

  <updateRequestProcessorChain name="parse-field-types">
    <processor class="solr.RemoveBlankFieldUpdateProcessorFactory"/>
    <processor class="solr.ParseBooleanFieldUpdateProcessorFactory"/>
    <processor class="solr.ParseLongFieldUpdateProcessorFactory"/>
    <processor class="solr.ParseDoubleFieldUpdateProcessorFactory"/>
    <processor class="solr.ParseDateFieldUpdateProcessorFactory">
      <!-- A default time zone name or offset may optionally be specified for those 
           dates that don't include an explicit zone/offset.
      -->
      <str name="defaultTimeZone">Europe/Berlin</str>
      <arr name="format">
        <str>yyyy-MM-dd'T'HH:mm:ss.SSSZ</str>
        <str>yyyy-MM-dd'T'HH:mm:ssZ</str>
        <str>yyyy-MM-dd HH:mm:ss Z</str>
        <str>yyyy-MM-dd HH:mm:ss</str>
        <str>yyyy-MM-dd HH:mm:ss 'UTC</str>
      </arr>
    </processor>
    <processor class="solr.LogUpdateProcessorFactory"/>
    <processor class="solr.RunUpdateProcessorFactory"/>
  </updateRequestProcessorChain>

然后,您必须将updateRequestProcessorChain与更新请求处理程序

连接起来
  <requestHandler name="/update" class="solr.UpdateRequestHandler">
    <lst name="defaults">
      <str name="update.chain">parse-field-types</str>
    </lst>
  </requestHandler>

也许你可以在这里定义一种适合你的格式。