You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by sh...@apache.org on 2009/02/03 22:09:06 UTC

svn commit: r740445 - in /lucene/solr/trunk: CHANGES.txt src/java/org/apache/solr/search/ValueSourceParser.java src/java/org/apache/solr/search/function/RangeMapFloatFunction.java

Author: shalin
Date: Tue Feb  3 21:09:04 2009
New Revision: 740445

URL: http://svn.apache.org/viewvc?rev=740445&view=rev
Log:
SOLR-966 -- Enhance the map function query to take in an optional default value

Modified:
    lucene/solr/trunk/CHANGES.txt
    lucene/solr/trunk/src/java/org/apache/solr/search/ValueSourceParser.java
    lucene/solr/trunk/src/java/org/apache/solr/search/function/RangeMapFloatFunction.java

Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=740445&r1=740444&r2=740445&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Tue Feb  3 21:09:04 2009
@@ -143,6 +143,8 @@
 
 31. SOLR-763: Add support for Lucene's PositionFilter (Mck SembWever via shalin)
 
+32. SOLR-966: Enhance the map() function query to take in an optional default value (Noble Paul, shalin)
+
 
 Optimizations
 ----------------------

Modified: lucene/solr/trunk/src/java/org/apache/solr/search/ValueSourceParser.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/search/ValueSourceParser.java?rev=740445&r1=740444&r2=740445&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/search/ValueSourceParser.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/search/ValueSourceParser.java Tue Feb  3 21:09:04 2009
@@ -160,7 +160,8 @@
         float min = fp.parseFloat();
         float max = fp.parseFloat();
         float target = fp.parseFloat();
-        return new RangeMapFloatFunction(source,min,max,target);
+        Float def = fp.hasMoreArguments() ? fp.parseFloat() : null;
+        return new RangeMapFloatFunction(source,min,max,target,def);
       }
 
       public void init(NamedList args) {

Modified: lucene/solr/trunk/src/java/org/apache/solr/search/function/RangeMapFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/search/function/RangeMapFloatFunction.java?rev=740445&r1=740444&r2=740445&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/search/function/RangeMapFloatFunction.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/search/function/RangeMapFloatFunction.java Tue Feb  3 21:09:04 2009
@@ -34,12 +34,14 @@
   protected final float min;
   protected final float max;
   protected final float target;
+  protected final Float defaultVal;
 
-  public RangeMapFloatFunction(ValueSource source, float min, float max, float target) {
+  public RangeMapFloatFunction(ValueSource source, float min, float max, float target, Float def) {
     this.source = source;
     this.min = min;
     this.max = max;
     this.target = target;
+    this.defaultVal = def;
   }
 
   public String description() {
@@ -51,7 +53,7 @@
     return new DocValues() {
       public float floatVal(int doc) {
         float val = vals.floatVal(doc);
-        return (val>=min && val<=max) ? target : val;
+        return (val>=min && val<=max) ? target : (defaultVal == null ? val : defaultVal);
       }
       public int intVal(int doc) {
         return (int)floatVal(doc);
@@ -74,11 +76,13 @@
   public int hashCode() {
     int h = source.hashCode();
     h ^= (h << 10) | (h >>> 23);
-    Float.floatToIntBits(min);
+    h += Float.floatToIntBits(min);
     h ^= (h << 14) | (h >>> 19);
     h += Float.floatToIntBits(max);
     h ^= (h << 13) | (h >>> 20);
     h += Float.floatToIntBits(target);
+    if (defaultVal != null)
+      h += defaultVal.hashCode();
     return h;
   }
 
@@ -88,6 +92,7 @@
     return  this.min == other.min
          && this.max == other.max
          && this.target == other.target
-         && this.source.equals(other.source);
+         && this.source.equals(other.source)
+         && (this.defaultVal == other.defaultVal || (this.defaultVal != null && this.defaultVal.equals(other.defaultVal)));
   }
 }