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