mirror of https://github.com/apache/lucene.git
SOLR-8858: SolrIndexSearcher#doc() completely ignores field filters unless lazy field loading is enabled.
This closes #47.
This commit is contained in:
parent
7743718d29
commit
24d6b78469
|
@ -128,6 +128,9 @@ Bug Fixes
|
|||
is introduced (defaults to true) to send version ranges instead of individual versions for peer sync.
|
||||
(Pushkar Raste, shalin)
|
||||
|
||||
* SOLR-8858: SolrIndexSearcher#doc() completely ignores field filters unless lazy field loading is enabled.
|
||||
(Caleb Rackliffe, David Smiley, shalin)
|
||||
|
||||
Optimizations
|
||||
----------------------
|
||||
|
||||
|
|
|
@ -766,12 +766,22 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
|
|||
}
|
||||
|
||||
final DirectoryReader reader = getIndexReader();
|
||||
if (!enableLazyFieldLoading || fields == null) {
|
||||
d = reader.document(i);
|
||||
if (fields != null) {
|
||||
if (enableLazyFieldLoading) {
|
||||
final SetNonLazyFieldSelector visitor = new SetNonLazyFieldSelector(fields, reader, i);
|
||||
reader.document(i, visitor);
|
||||
d = visitor.doc;
|
||||
} else if (documentCache == null) {
|
||||
d = reader.document(i, fields);
|
||||
} else {
|
||||
// we do not pass the fields in this case because that would return an incomplete document which would
|
||||
// be eventually cached. The alternative would be to read the stored fields twice; once with the fields
|
||||
// and then without for caching leading to a performance hit
|
||||
// see SOLR-8858 for related discussion
|
||||
d = reader.document(i);
|
||||
}
|
||||
} else {
|
||||
final SetNonLazyFieldSelector visitor = new SetNonLazyFieldSelector(fields, reader, i);
|
||||
reader.document(i, visitor);
|
||||
d = visitor.doc;
|
||||
d = reader.document(i);
|
||||
}
|
||||
|
||||
if (documentCache != null) {
|
||||
|
|
|
@ -127,7 +127,7 @@ public class TestSubQueryTransformer extends SolrTestCaseJ4 {
|
|||
//System.out.println("p "+peopleMultiplier+" d "+deptMultiplier);
|
||||
assertQ("subq1.fl is limited to single field",
|
||||
req("q","name_s:(john nancy)", "indent","true",
|
||||
"fl","name_s_dv,depts:[subquery]",
|
||||
"fl","dept_ss_dv,name_s_dv,depts:[subquery]",
|
||||
"rows","" + (2 * peopleMultiplier),
|
||||
"depts.q","{!term f=dept_id_s v=$row.dept_ss_dv}",
|
||||
"depts.fl","text_t",
|
||||
|
@ -150,8 +150,8 @@ public class TestSubQueryTransformer extends SolrTestCaseJ4 {
|
|||
}
|
||||
|
||||
final String[] johnAndNancyParams = new String[]{"q","name_s:(john nancy)", "indent","true",
|
||||
"fl","name_s_dv,depts:[subquery]",
|
||||
"fl","depts_i:[subquery]",
|
||||
"fl","dept_ss_dv,name_s_dv,depts:[subquery]",
|
||||
"fl","dept_i_dv,depts_i:[subquery]",
|
||||
"rows","" + (2 * peopleMultiplier),
|
||||
"depts.q","{!term f=dept_id_s v=$row.dept_ss_dv}",
|
||||
"depts.fl","text_t",
|
||||
|
@ -225,7 +225,7 @@ public class TestSubQueryTransformer extends SolrTestCaseJ4 {
|
|||
}
|
||||
|
||||
String[] john = new String[]{"q","name_s:john", "indent","true",
|
||||
"fl","name_s_dv,depts:[subquery]",
|
||||
"fl","dept_ss_dv,name_s_dv,depts:[subquery]",
|
||||
"rows","" + (2 * peopleMultiplier),
|
||||
"depts.q","+{!term f=dept_id_s v=$row.dept_ss_dv}^=0 _val_:id_i",
|
||||
"depts.fl","id",
|
||||
|
@ -277,10 +277,10 @@ public class TestSubQueryTransformer extends SolrTestCaseJ4 {
|
|||
assertQ("dave works at both dept with other folks",
|
||||
// System.out.println(h.query(
|
||||
req(new String[]{"q","name_s:dave", "indent","true",
|
||||
"fl","name_s_dv,subq1:[subquery]",
|
||||
"fl","dept_ss_dv,name_s_dv,subq1:[subquery]",
|
||||
"rows","" + peopleMultiplier,
|
||||
"subq1.q","{!terms f=dept_id_s v=$row.dept_ss_dv}",
|
||||
"subq1.fl","text_t,dept_id_s_dv,neighbours:[subquery]",
|
||||
"subq1.fl","dept_id_i_dv,text_t,dept_id_s_dv,neighbours:[subquery]",
|
||||
"subq1.indent","true",
|
||||
"subq1.rows",""+(deptMultiplier*2),
|
||||
"subq1.neighbours.q",//flipping via numbers
|
||||
|
@ -459,9 +459,8 @@ public class TestSubQueryTransformer extends SolrTestCaseJ4 {
|
|||
|
||||
assertQ("dave works at both, whether we set a default separator or both",
|
||||
req(new String[]{"q","name_s:dave", "indent","true",
|
||||
"fl",(random().nextBoolean() ? "name_s_dv" : "*")+ //"dept_ss_dv,
|
||||
",subq1:[subquery "
|
||||
+((random1.nextBoolean() ? "" : "separator=,"))+"]",
|
||||
"fl", (random().nextBoolean() ? "name_s_dv,dept_ss_dv" : "*") +
|
||||
",subq1:[subquery " +((random1.nextBoolean() ? "" : "separator=,"))+"]",
|
||||
"rows","" + peopleMultiplier,
|
||||
"subq1.q","{!terms f=dept_id_s v=$row.dept_ss_dv "+((random1.nextBoolean() ? "" : "separator=,"))+"}",
|
||||
"subq1.fl","text_t",
|
||||
|
|
Loading…
Reference in New Issue