You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2011/04/12 19:40:22 UTC

svn commit: r1091516 - in /lucene/dev/trunk/solr: CHANGES.txt src/java/org/apache/solr/search/ValueSourceParser.java src/test/org/apache/solr/search/function/TestFunctionQuery.java

Author: hossman
Date: Tue Apr 12 17:40:22 2011
New Revision: 1091516

URL: http://svn.apache.org/viewvc?rev=1091516&view=rev
Log:
SOLR-2335: New field(...) function syntax for refering to complex field names (containing whitespace or special characters)

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

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1091516&r1=1091515&r2=1091516&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Tue Apr 12 17:40:22 2011
@@ -121,6 +121,8 @@ New Features
 * SOLR-2338: Add support for using <similarity/> in a schema's fieldType,
   for customizing scoring on a per-field basis. (hossman, yonik, rmuir)
   
+* SOLR-2335: New 'field("...")' function syntax for refering to complex 
+  field names (containing whitespace or special characters) in functions.
 
 Optimizations
 ----------------------

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/search/ValueSourceParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/search/ValueSourceParser.java?rev=1091516&r1=1091515&r2=1091516&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/search/ValueSourceParser.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/search/ValueSourceParser.java Tue Apr 12 17:40:22 2011
@@ -335,6 +335,15 @@ public abstract class ValueSourceParser 
         return new StringDistanceFunction(str1, str2, dist);
       }
     });
+    addParser("field", new ValueSourceParser() {
+      @Override
+      public ValueSource parse(FunctionQParser fp) throws ParseException {
+
+        String fieldName = fp.parseArg();
+        SchemaField f = fp.getReq().getSchema().getField(fieldName);
+        return f.getType().getValueSource(f, fp);
+      }
+    });
 
     addParser(new DoubleParser("rad") {
       @Override

Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java?rev=1091516&r1=1091515&r2=1091516&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java Tue Apr 12 17:40:22 2011
@@ -71,16 +71,14 @@ public class TestFunctionQuery extends S
 
   // replace \0 with the field name and create a parseable string 
   public String func(String field, String template) {
-    StringBuilder sb = new StringBuilder("_val_:\"");
+    StringBuilder sb = new StringBuilder("{!func}");
     for (char ch : template.toCharArray()) {
       if (ch=='\0') {
         sb.append(field);
         continue;
       }
-      if (ch=='"') sb.append('\\');
       sb.append(ch);
     }
-    sb.append('"');
     return sb.toString();
   }
 
@@ -520,5 +518,38 @@ public class TestFunctionQuery extends S
     dofunc("atan2(.25,.5)", Math.atan2(.25,.5));
   }
 
+  /**
+   * verify that both the field("...") value source parser as well as 
+   * ExternalFileField work with esoteric field names
+   */
+  @Test
+  public void testExternalFieldValueSourceParser() {
+
+    String field = "CoMpleX \" fieldName _extf";
+    String fieldAsFunc = "field(\"CoMpleX \\\" fieldName _extf\")";
+
+    float[] ids = {100,-4,0,10,25,5,77,23,55,-78,-45,-24,63,78,94,22,34,54321,261,-627};
+
+    createIndex(null,ids);
+
+    // Unsorted field, largest first
+    makeExternalFile(field, "54321=543210\n0=-999\n25=250","UTF-8");
+    // test identity (straight field value)
+    singleTest(fieldAsFunc, "\0", 54321, 543210, 0,-999, 25,250, 100, 1);
+    Object orig = FileFloatSource.onlyForTesting;
+    singleTest(fieldAsFunc, "log(\0)");
+    // make sure the values were cached
+    assertTrue(orig == FileFloatSource.onlyForTesting);
+    singleTest(fieldAsFunc, "sqrt(\0)");
+    assertTrue(orig == FileFloatSource.onlyForTesting);
+
+    makeExternalFile(fieldAsFunc, "0=1","UTF-8");
+    assertU(adoc("id", "10000")); // will get same reader if no index change
+    assertU(commit());   
+    singleTest(fieldAsFunc, "sqrt(\0)");
+    assertTrue(orig != FileFloatSource.onlyForTesting);
+
+    purgeFieldCache(FieldCache.DEFAULT);   // avoid FC insanity    
+  }
 
 }



Re: svn commit: r1091516 - in /lucene/dev/trunk/solr: CHANGES.txt src/java/org/apache/solr/search/ValueSourceParser.java src/test/org/apache/solr/search/function/TestFunctionQuery.java

Posted by Robert Muir <rc...@gmail.com>.
I think this is causing tests to consistently fail (at least on
windows). I opened a JIRA issue:
https://issues.apache.org/jira/browse/SOLR-2468

I set the test to @ignore for now

On Tue, Apr 12, 2011 at 1:40 PM,  <ho...@apache.org> wrote:
> Author: hossman
> Date: Tue Apr 12 17:40:22 2011
> New Revision: 1091516
>
> URL: http://svn.apache.org/viewvc?rev=1091516&view=rev
> Log:
> SOLR-2335: New field(...) function syntax for refering to complex field names (containing whitespace or special characters)
>
> Modified:
>    lucene/dev/trunk/solr/CHANGES.txt
>    lucene/dev/trunk/solr/src/java/org/apache/solr/search/ValueSourceParser.java
>    lucene/dev/trunk/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java
>
> Modified: lucene/dev/trunk/solr/CHANGES.txt
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1091516&r1=1091515&r2=1091516&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/CHANGES.txt (original)
> +++ lucene/dev/trunk/solr/CHANGES.txt Tue Apr 12 17:40:22 2011
> @@ -121,6 +121,8 @@ New Features
>  * SOLR-2338: Add support for using <similarity/> in a schema's fieldType,
>   for customizing scoring on a per-field basis. (hossman, yonik, rmuir)
>
> +* SOLR-2335: New 'field("...")' function syntax for refering to complex
> +  field names (containing whitespace or special characters) in functions.
>
>  Optimizations
>  ----------------------
>
> Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/search/ValueSourceParser.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/search/ValueSourceParser.java?rev=1091516&r1=1091515&r2=1091516&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/src/java/org/apache/solr/search/ValueSourceParser.java (original)
> +++ lucene/dev/trunk/solr/src/java/org/apache/solr/search/ValueSourceParser.java Tue Apr 12 17:40:22 2011
> @@ -335,6 +335,15 @@ public abstract class ValueSourceParser
>         return new StringDistanceFunction(str1, str2, dist);
>       }
>     });
> +    addParser("field", new ValueSourceParser() {
> +      @Override
> +      public ValueSource parse(FunctionQParser fp) throws ParseException {
> +
> +        String fieldName = fp.parseArg();
> +        SchemaField f = fp.getReq().getSchema().getField(fieldName);
> +        return f.getType().getValueSource(f, fp);
> +      }
> +    });
>
>     addParser(new DoubleParser("rad") {
>       @Override
>
> Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java?rev=1091516&r1=1091515&r2=1091516&view=diff
> ==============================================================================
> --- lucene/dev/trunk/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java (original)
> +++ lucene/dev/trunk/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java Tue Apr 12 17:40:22 2011
> @@ -71,16 +71,14 @@ public class TestFunctionQuery extends S
>
>   // replace \0 with the field name and create a parseable string
>   public String func(String field, String template) {
> -    StringBuilder sb = new StringBuilder("_val_:\"");
> +    StringBuilder sb = new StringBuilder("{!func}");
>     for (char ch : template.toCharArray()) {
>       if (ch=='\0') {
>         sb.append(field);
>         continue;
>       }
> -      if (ch=='"') sb.append('\\');
>       sb.append(ch);
>     }
> -    sb.append('"');
>     return sb.toString();
>   }
>
> @@ -520,5 +518,38 @@ public class TestFunctionQuery extends S
>     dofunc("atan2(.25,.5)", Math.atan2(.25,.5));
>   }
>
> +  /**
> +   * verify that both the field("...") value source parser as well as
> +   * ExternalFileField work with esoteric field names
> +   */
> +  @Test
> +  public void testExternalFieldValueSourceParser() {
> +
> +    String field = "CoMpleX \" fieldName _extf";
> +    String fieldAsFunc = "field(\"CoMpleX \\\" fieldName _extf\")";
> +
> +    float[] ids = {100,-4,0,10,25,5,77,23,55,-78,-45,-24,63,78,94,22,34,54321,261,-627};
> +
> +    createIndex(null,ids);
> +
> +    // Unsorted field, largest first
> +    makeExternalFile(field, "54321=543210\n0=-999\n25=250","UTF-8");
> +    // test identity (straight field value)
> +    singleTest(fieldAsFunc, "\0", 54321, 543210, 0,-999, 25,250, 100, 1);
> +    Object orig = FileFloatSource.onlyForTesting;
> +    singleTest(fieldAsFunc, "log(\0)");
> +    // make sure the values were cached
> +    assertTrue(orig == FileFloatSource.onlyForTesting);
> +    singleTest(fieldAsFunc, "sqrt(\0)");
> +    assertTrue(orig == FileFloatSource.onlyForTesting);
> +
> +    makeExternalFile(fieldAsFunc, "0=1","UTF-8");
> +    assertU(adoc("id", "10000")); // will get same reader if no index change
> +    assertU(commit());
> +    singleTest(fieldAsFunc, "sqrt(\0)");
> +    assertTrue(orig != FileFloatSource.onlyForTesting);
> +
> +    purgeFieldCache(FieldCache.DEFAULT);   // avoid FC insanity
> +  }
>
>  }
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org