Sumit
Sumit

Reputation: 878

How to index a date without day & time in Apache Solr

In my database the dates are like 1973-01. They are stored as string value. If I have to index this using Apache Solr then how would I do it.

I have written the below in my schema.xml:

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

I have also changed all the dates like 1973-01Z. But I am still getting an error:

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

I believe Solr only accepts date like 1995-12-31T23:59:59Z

Can anyone help?

Upvotes: 3

Views: 1242

Answers (1)

Holger Thurow
Holger Thurow

Reputation: 824

In solrconfig.xml you can define the date formats your update request handler can process inside an updateRequestProcessorChain with the help of a ParseDateFieldUpdateProcessorFactory:

  <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>

Then you have to connect the updateRequestProcessorChain with the update request handler

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

Maybe you can define a format here that is working for you.

Upvotes: 1

Related Questions