You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ry...@apache.org on 2011/03/29 20:45:54 UTC

svn commit: r1086681 - /lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TrieDateField.java

Author: ryan
Date: Tue Mar 29 18:45:54 2011
New Revision: 1086681

URL: http://svn.apache.org/viewvc?rev=1086681&view=rev
Log:
LUCENE-3001 fix solr trie date field from #1086651

Modified:
    lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TrieDateField.java

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TrieDateField.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TrieDateField.java?rev=1086681&r1=1086680&r2=1086681&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TrieDateField.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/schema/TrieDateField.java Tue Mar 29 18:45:54 2011
@@ -27,6 +27,7 @@ import org.apache.solr.search.function.*
 import org.apache.solr.search.QParser;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.lucene.document.Fieldable;
+import org.apache.lucene.document.Field;
 import org.apache.lucene.search.SortField;
 import org.apache.lucene.search.FieldCache;
 import org.apache.lucene.search.Query;
@@ -36,6 +37,8 @@ import org.apache.lucene.search.cache.Lo
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.NumericUtils;
 import org.apache.lucene.util.TrieFieldHelper;
+import org.apache.lucene.analysis.TokenStream;
+import org.apache.lucene.analysis.NumericTokenStream;
 
 import java.util.Map;
 import java.util.Date;
@@ -165,6 +168,44 @@ public class TrieDateField extends DateF
     return readableToIndexed(storedToReadable(f));
   }
 
+  @Override
+  public Fieldable createField(SchemaField field, Object value, float boost) {
+    boolean indexed = field.indexed();
+    boolean stored = field.stored();
+
+    if (!indexed && !stored) {
+      if (log.isTraceEnabled())
+        log.trace("Ignoring unindexed/unstored field: " + field);
+      return null;
+    }
+
+    int ps = precisionStep;
+
+    byte[] arr=null;
+    TokenStream ts=null;
+
+    long time = (value instanceof Date) 
+      ? ((Date)value).getTime() 
+      : super.parseMath(null, value.toString()).getTime();
+      
+    if (stored) arr = TrieFieldHelper.toArr(time);
+    if (indexed) ts = new NumericTokenStream(ps).setLongValue(time);
+
+    Field f;
+    if (stored) {
+      f = new Field(field.getName(), arr);
+      if (indexed) f.setTokenStream(ts);
+    } else {
+      f = new Field(field.getName(), ts);
+    }
+
+    // term vectors aren't supported
+
+    f.setOmitNorms(field.omitNorms());
+    f.setOmitTermFreqAndPositions(field.omitTf());
+    f.setBoost(boost);
+    return f;
+  }
 
   @Override
   public Query getRangeQuery(QParser parser, SchemaField field, String min, String max, boolean minInclusive, boolean maxInclusive) {