You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2016/06/16 13:46:25 UTC

[5/8] lucene-solr:branch_5x: SOLR-8902: Make sure ReturnFields only returns the requested fields

SOLR-8902: Make sure ReturnFields only returns the requested fields


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/8a91a933
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/8a91a933
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/8a91a933

Branch: refs/heads/branch_5x
Commit: 8a91a9339626a1d1a8136ece2e28d97fbc5a8d77
Parents: 37f4d73
Author: Ryan McKinley <ry...@apache.org>
Authored: Fri Mar 25 12:22:44 2016 -0700
Committer: Steve Rowe <sa...@apache.org>
Committed: Wed Jun 15 19:22:03 2016 -0400

----------------------------------------------------------------------
 .../org/apache/solr/response/BinaryResponseWriter.java | 13 +++++++++----
 .../java/org/apache/solr/search/SolrReturnFields.java  | 12 +-----------
 .../test/org/apache/solr/search/ReturnFieldsTest.java  |  8 ++++++++
 3 files changed, 18 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/8a91a933/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java b/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java
index 339b157..0e71333 100644
--- a/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java
+++ b/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java
@@ -73,8 +73,7 @@ public class BinaryResponseWriter implements BinaryQueryResponseWriter {
   public static class Resolver implements JavaBinCodec.ObjectResolver , JavaBinCodec.WritableDocFields {
     protected final SolrQueryRequest solrQueryRequest;
     protected IndexSchema schema;
-    protected SolrIndexSearcher searcher;
-    protected final ReturnFields returnFields;
+    protected ReturnFields returnFields;
 
     public Resolver(SolrQueryRequest req, ReturnFields returnFields) {
       solrQueryRequest = req;
@@ -84,7 +83,13 @@ public class BinaryResponseWriter implements BinaryQueryResponseWriter {
     @Override
     public Object resolve(Object o, JavaBinCodec codec) throws IOException {
       if (o instanceof ResultContext) {
-        writeResults((ResultContext) o, codec);
+        ReturnFields orig = returnFields;
+        ResultContext res = (ResultContext)o;
+        if(res.getReturnFields()!=null) {
+          returnFields = res.getReturnFields();
+        }
+        writeResults(res, codec);
+        returnFields = orig;
         return null; // null means we completely handled it
       }
       if (o instanceof DocList) {
@@ -125,7 +130,7 @@ public class BinaryResponseWriter implements BinaryQueryResponseWriter {
         codec.writeSolrDocument(doc);
       }
     }
-    
+
     public void writeResults(ResultContext ctx, JavaBinCodec codec) throws IOException {
       codec.writeTag(JavaBinCodec.SOLRDOCLST);
       boolean wantsScores = returnFields.wantsScore() && ctx.docs.hasScores();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/8a91a933/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java b/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java
index b84f4de..b667f0e 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java
@@ -51,6 +51,7 @@ public class SolrReturnFields extends ReturnFields {
   private final List<String> globs = new ArrayList<>(1);
 
   // The lucene field names to request from the SolrIndexSearcher
+  // This *may* include fields that will not be in the final response
   private final Set<String> fields = new HashSet<>();
 
   // Field names that are OK to include in the response.
@@ -130,17 +131,6 @@ public class SolrReturnFields extends ReturnFields {
       augmenters.addTransformer( new RenameFieldTransformer( from, to, copy ) );
     }
 
-    if( !_wantsAllFields ) {
-      if( !globs.isEmpty() ) {
-        // TODO??? need to fill up the fields with matching field names in the index
-        // and add them to okFieldNames?
-        // maybe just get all fields?
-        // this would disable field selection optimization... i think thatis OK
-        fields.clear(); // this will get all fields, and use wantsField to limit
-      }
-      okFieldNames.addAll( fields );
-    }
-
     if( augmenters.size() == 1 ) {
       transformer = augmenters.getTransformer(0);
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/8a91a933/solr/core/src/test/org/apache/solr/search/ReturnFieldsTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/ReturnFieldsTest.java b/solr/core/src/test/org/apache/solr/search/ReturnFieldsTest.java
index f72aee8..459f959 100644
--- a/solr/core/src/test/org/apache/solr/search/ReturnFieldsTest.java
+++ b/solr/core/src/test/org/apache/solr/search/ReturnFieldsTest.java
@@ -264,6 +264,14 @@ public class ReturnFieldsTest extends SolrTestCaseJ4 {
     assertFalse( rf.wantsField( "id" ) );
     assertFalse(rf.wantsAllFields());
     assertNull(rf.getTransformer());
+
+    // Don't return 'store_rpt' just because it is required by the transformer
+    rf = new SolrReturnFields( req("fl", "[geo f=store_rpt]") );
+    assertFalse( rf.wantsScore() );
+    assertTrue(rf.wantsField("[geo]"));
+    assertFalse( rf.wantsField( "store_rpt" ) );
+    assertFalse(rf.wantsAllFields());
+    assertNotNull(rf.getTransformer());
   }
 
   @Test