Search on Date Field JodaTime
smoers Jul 7, 2015 7:38 AMI use a data type "DateTime" of Jodatime package in my class "Author".
To convert this data type to a lucene document, I use a class JodaTimeSplitBridge which implement the interface "TwoWayFieldBridge".
If I search an object on the value of date field, It not found object !
Author.java
@Field(store=Store.YES, index=Index.YES) @FieldBridge(impl=JodaTimeSplitBridge.class) private DateTime creationdate;
JodaTimeSplitBridge.java
package org.infinispan;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexableField;
import org.hibernate.search.bridge.LuceneOptions;
import org.hibernate.search.bridge.TwoWayFieldBridge;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
public class JodaTimeSplitBridge implements TwoWayFieldBridge {
  @Override
  public void set(String name, Object value, Document document, LuceneOptions luceneoptions) {
  DateTime datetime = (DateTime) value;
  int year = datetime.getYear();
  int month = datetime.getMonthOfYear();
  int day = datetime.getDayOfMonth();
  // set year
  luceneoptions.addFieldToDocument(name+".year",String.valueOf(year), document);
  // set month
  luceneoptions.addFieldToDocument(name+".month", String.format("%02d",month), document);
  // set day
  luceneoptions.addFieldToDocument(name+".day", String.format("%02d",day), document);
  }
  @Override
  public Object get(String name, Document document) {
  IndexableField fieldyear = document.getField(name+".year");
  IndexableField fieldmonth = document.getField(name+".month");
  IndexableField fieldday = document.getField(name+".day");
  String strdate = fieldday.stringValue()+"/"+fieldmonth.stringValue()+"/"+fieldyear.stringValue();
  DateTime value = DateTime.parse(strdate, DateTimeFormat.forPattern("dd/MM/yyyy"));
  return String.valueOf(value);
  }
  @Override
  public String objectToString(Object date) {
  DateTime datetime = (DateTime) date;
  int year = datetime.getYear();
  int month = datetime.getMonthOfYear();
  int day = datetime.getDayOfMonth();
  String value = String.format("%02d",day)+"/"+String.format("%02d",month)+"/"+String.valueOf(year);
  return String.valueOf(value);
  }
}
 
     
    