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 2013/04/16 20:35:53 UTC

svn commit: r1468550 - in /lucene/dev/branches/branch_4x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/response/ solr/core/src/java/org/apache/solr/search/ solr/core/src/test/org/apache/solr/response/

Author: ryan
Date: Tue Apr 16 18:35:52 2013
New Revision: 1468550

URL: http://svn.apache.org/r1468550
Log:
Merged revision(s) 1468549 from lucene/dev/trunk:
SOLR-4671: CSV writer now supports pseudo fields
........

Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/solr/   (props changed)
    lucene/dev/branches/branch_4x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_4x/solr/core/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ReturnFields.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java
    lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java

Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1468550&r1=1468549&r2=1468550&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Tue Apr 16 18:35:52 2013
@@ -127,7 +127,9 @@ New Features
 
 * SOLR-4717/SOLR-1351: SimpleFacets now work with localParams allowing faceting on the 
   same field multiple ways (ryan, Uri Boness)
-   
+
+* SOLR-4671: CSVResponseWriter now supports pseudo fields. (ryan, nihed mbarek)
+
 
 Bug Fixes
 ----------------------

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java?rev=1468550&r1=1468549&r2=1468550&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java Tue Apr 16 18:35:52 2013
@@ -235,19 +235,27 @@ class CSVWriter extends TextResponseWrit
       // encapsulator will already be disabled if it wasn't specified
     }
 
-    Collection<String> fields = returnFields.getLuceneFieldNames();
+    Collection<String> fields = returnFields.getRequestedFieldNames();
     Object responseObj = rsp.getValues().get("response");
     boolean returnOnlyStored = false;
-    if (fields==null) {
+    if (fields==null||returnFields.hasPatternMatching()) {
       if (responseObj instanceof SolrDocumentList) {
         // get the list of fields from the SolrDocumentList
-        fields = new LinkedHashSet<String>();
+        if(fields==null) {
+          fields = new LinkedHashSet<String>();
+        }
         for (SolrDocument sdoc: (SolrDocumentList)responseObj) {
           fields.addAll(sdoc.getFieldNames());
         }
       } else {
         // get the list of fields from the index
-        fields = req.getSearcher().getFieldNames();
+        Collection<String> all = req.getSearcher().getFieldNames();
+        if(fields==null) {
+          fields = all;
+        }
+        else {
+          fields.addAll(all);
+        }
       }
       if (returnFields.wantsScore()) {
         fields.add("score");

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ReturnFields.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ReturnFields.java?rev=1468550&r1=1468549&r2=1468550&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ReturnFields.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ReturnFields.java Tue Apr 16 18:35:52 2013
@@ -35,6 +35,13 @@ public abstract class ReturnFields {
    */
   public abstract Set<String> getLuceneFieldNames();
 
+  /**
+   * The requested field names (includes pseudo fields)
+   * <p>
+   * @return Set of field names or <code>null</code> (all fields).
+   */
+  public abstract Set<String> getRequestedFieldNames();
+
   /** Returns <code>true</code> if the specified field should be returned. */
   public abstract boolean wantsField(String name);
 
@@ -44,6 +51,9 @@ public abstract class ReturnFields {
   /** Returns <code>true</code> if the score should be returned. */
   public abstract boolean wantsScore();
 
+  /** Returns <code>true</code> if the fieldnames should be picked with a pattern */
+  public abstract boolean hasPatternMatching();
+
   /** Returns the DocTransformer used to modify documents, or <code>null</code> */
   public abstract DocTransformer getTransformer();
 }

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java?rev=1468550&r1=1468549&r2=1468550&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java Tue Apr 16 18:35:52 2013
@@ -52,14 +52,14 @@ public class SolrReturnFields extends Re
   private final List<String> globs = new ArrayList<String>(1);
 
   // The lucene field names to request from the SolrIndexSearcher
-  // Order is important for CSVResponseWriter
-  private final Set<String> fields = new LinkedHashSet<String>();
+  private final Set<String> fields = new HashSet<String>();
 
   // Field names that are OK to include in the response.
   // This will include pseudo fields, lucene fields, and matching globs
   private Set<String> okFieldNames = new HashSet<String>();
 
   // The list of explicitly requested fields
+  // Order is important for CSVResponseWriter
   private Set<String> reqFieldNames = null;
   
   protected DocTransformer transformer;
@@ -122,7 +122,7 @@ public class SolrReturnFields extends Re
           if(from.equals(rename.getName(j))) {
             rename.setName(j, to); // copy from the current target
             if(reqFieldNames==null) {
-              reqFieldNames = new HashSet<String>();
+              reqFieldNames = new LinkedHashSet<String>();
             }
             reqFieldNames.add(to); // don't rename our current target
           }
@@ -360,12 +360,16 @@ public class SolrReturnFields extends Re
 
   private void addField(String field, String key, DocTransformers augmenters, SolrQueryRequest req)
   {
+    if(reqFieldNames==null) {
+      reqFieldNames = new LinkedHashSet<String>();
+    }
+    
     if(key==null) {
-      if(reqFieldNames==null) {
-        reqFieldNames = new HashSet<String>();
-      }
       reqFieldNames.add(field);
     }
+    else {
+      reqFieldNames.add(key);
+    }
 
     fields.add(field); // need to put in the map to maintain order for things like CSVResponseWriter
     okFieldNames.add( field );
@@ -386,6 +390,19 @@ public class SolrReturnFields extends Re
   }
 
   @Override
+  public Set<String> getRequestedFieldNames() {
+    if(_wantsAllFields || reqFieldNames==null || reqFieldNames.isEmpty()) {
+      return null;
+    }
+    return reqFieldNames;
+  }
+  
+  @Override
+  public boolean hasPatternMatching() {
+    return !globs.isEmpty();
+  }
+
+  @Override
   public boolean wantsField(String name)
   {
     if( _wantsAllFields || okFieldNames.contains( name ) ){

Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java?rev=1468550&r1=1468549&r2=1468550&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java Tue Apr 16 18:35:52 2013
@@ -59,7 +59,7 @@ public class TestCSVResponseWriter exten
     // test multivalued
     assertEquals("2,\"hi,there\"\n"
     , h.query(req("q","id:2", "wt","csv", "csv.header","false", "fl","id,v_ss")));
-
+    
     // test separator change
     assertEquals("2|\"hi|there\"\n"
     , h.query(req("q","id:2", "wt","csv", "csv.header","false", "csv.separator","|", "fl","id,v_ss")));
@@ -193,6 +193,21 @@ public class TestCSVResponseWriter exten
 
     req.close();
   }
+  
+
+  @Test
+  public void testPseudoFields() throws Exception {
+    // Use Pseudo Field
+    assertEquals("1,hi",
+        h.query(req("q","id:1", "wt","csv", "csv.header","false", "fl","XXX:id,foo_s")).trim());
+    
+    String txt = h.query(req("q","id:1", "wt","csv", "csv.header","true", "fl","XXX:id,YYY:[docid],FOO:foo_s"));
+    String[] lines = txt.split("\n");
+    assertEquals(2, lines.length);
+    assertEquals("XXX,YYY,FOO", lines[0] );
+    assertEquals("1,0,hi", lines[1] );
+  }
+    
 
   /*
    * Utility method to sort a comma separated list of strings, for easier comparison regardless of platform