Solr DateToLongTransfomer: Convert Date to Milliseconds

Scenario
During develop and debug one Solr feature, I constantly need check the value of date field.
In response, the date field is string, but in eclipse debug mode, the value is long(milliseconds from epoch time) - as Solr actually stores the milliseconds in index, so why not write one transformer that add the milliseconds into response.

Here it is.
DateToLongTransfomerFactory
public class DateToLongTransfomerFactory extends TransformerFactory {
  @Override
  public DocTransformer create(String field, SolrParams params,
      SolrQueryRequest req) {
    return new DateToLongTransfomer(field, params);
  }
  
  /**
   * org.apache.solr.search.SolrReturnFields.parseFieldList(String[],
   * SolrQueryRequest) DocTransformers augmenters = new DocTransformers();
   * 
   * DocTransformer is thread safe.
   */
  private static class DateToLongTransfomer extends DocTransformer {
    private String fl;
    private String field;
    
    public DateToLongTransfomer(String field, SolrParams params) {
      // field is the name of transformer [dateToLong]
      this.field = field;
      fl = Preconditions.checkNotNull(params.get("fl"),
          "fl can't be null in transfromer");
    }
    
    @Override
    public void transform(SolrDocument doc, int docid) throws IOException {
      String fieldValue = getFieldValue(doc, fl);
      if (fieldValue != null) {
        doc.addField(field, fieldValue);
      }
    }
    
  public static String getFieldValue(SolrDocument doc, String field) {
    List<String> rst = new ArrayList<String>();
    Object obj = doc.get(field);
    getFieldvalues(doc, rst, obj);
    
    if (rst.isEmpty()) {
      return null;
    }
    return rst.get(0);
  }    

  public static void getFieldvalues(SolrDocument doc, List<String> rst,
      Object obj) {
    if (obj == null) return;
    if (obj instanceof org.apache.lucene.document.Field) {
      org.apache.lucene.document.Field field = (Field) obj;
      String oldValue = field.stringValue();
      if (oldValue != null) {
        rst.add(oldValue);
      }
    } else if (obj instanceof IndexableField) {
      IndexableField field = (IndexableField) obj;
      String oldValue = field.stringValue();
      if (oldValue != null) {
        rst.add(oldValue);
      }
    } else if (obj instanceof Collection) {
      Collection colls = (Collection) obj;
      for (Object newObj : colls) {
        getFieldvalues(doc, rst, newObj);
      }
    } else {
      rst.add(obj.toString());
      // throw new RuntimeException("When this is called? obj.type:"
      // + obj.getClass());
    }
  }    
  }
}
Post a Comment

Labels

Java (159) Lucene-Solr (112) Interview (61) All (58) J2SE (53) Algorithm (45) Soft Skills (38) Eclipse (33) Code Example (31) Linux (25) JavaScript (23) Spring (22) Windows (22) Web Development (20) Tools (19) Nutch2 (18) Bugs (17) Debug (16) Defects (14) Text Mining (14) J2EE (13) Network (13) Troubleshooting (13) PowerShell (11) Chrome (9) Design (9) How to (9) Learning code (9) Performance (9) Problem Solving (9) UIMA (9) html (9) Http Client (8) Maven (8) Security (8) bat (8) blogger (8) Big Data (7) Continuous Integration (7) Google (7) Guava (7) JSON (7) Shell (7) ANT (6) Coding Skills (6) Database (6) Lesson Learned (6) Programmer Skills (6) Scala (6) Tips (6) css (6) Algorithm Series (5) Cache (5) Dynamic Languages (5) IDE (5) System Design (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Firefox (2) Google Drive (2) Gson (2) How to Interview (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Python (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts