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