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 2016/03/25 21:00:42 UTC
lucene-solr:master: SOLR-8902: Make sure ReturnFields only returns
the requested fields
Repository: lucene-solr
Updated Branches:
refs/heads/master a9eb26c44 -> ffd557b11
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/ffd557b1
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/ffd557b1
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/ffd557b1
Branch: refs/heads/master
Commit: ffd557b117455cb2a37e1a27cfd0d026314b4137
Parents: a9eb26c
Author: Ryan McKinley <ry...@apache.org>
Authored: Fri Mar 25 12:22:44 2016 -0700
Committer: Ryan McKinley <ry...@apache.org>
Committed: Fri Mar 25 12:59:32 2016 -0700
----------------------------------------------------------------------
solr/CHANGES.txt | 3 +++
.../org/apache/solr/response/BinaryResponseWriter.java | 11 ++++++++---
.../java/org/apache/solr/search/SolrReturnFields.java | 12 +-----------
.../test/org/apache/solr/search/ReturnFieldsTest.java | 8 ++++++++
4 files changed, 20 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ffd557b1/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 11e5b54..ea0aa8a 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -67,6 +67,9 @@ Bug Fixes
* SOLR-8855: The HDFS BlockDirectory should not clean up it's cache on shutdown. (Mark Miller)
+* SOLR-8902: Make sure ReturnFields only returns the requested fields from (fl=) evn when
+ DocumentTransformers ask for getExtraRequestFields() (ryan)
+
Optimizations
----------------------
* SOLR-8722: Don't force a full ZkStateReader refresh on every Overseer operation.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ffd557b1/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 6878f16..885bf78 100644
--- a/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java
+++ b/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java
@@ -72,8 +72,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; // TODO - this is never set? always null?
- protected final ReturnFields returnFields;
+ protected ReturnFields returnFields;
public Resolver(SolrQueryRequest req, ReturnFields returnFields) {
solrQueryRequest = req;
@@ -83,7 +82,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) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ffd557b1/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/ffd557b1/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