mirror of https://github.com/apache/lucene.git
SOLR-5231: Fixed a bug with the behavior of BoolField that caused documents w/o a value for the field to act as if the value were true in functions if no other documents in the same index segment had a value of true.
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1521948 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
49a7ccee8c
commit
86d4a61797
|
@ -225,6 +225,11 @@ Bug Fixes
|
|||
* SOLR-5227: Correctly fail schema initalization if a dynamicField is configured to
|
||||
be required, or have a default value. (hossman)
|
||||
|
||||
* SOLR-5231: Fixed a bug with the behavior of BoolField that caused documents w/o
|
||||
a value for the field to act as if the value were true in functions if no other
|
||||
documents in the same index segment had a value of true.
|
||||
(Robert Muir, hossman, yonik)
|
||||
|
||||
Optimizations
|
||||
----------------------
|
||||
|
||||
|
|
|
@ -173,7 +173,8 @@ class BoolFieldSource extends ValueSource {
|
|||
// figure out what ord maps to true
|
||||
int nord = sindex.getValueCount();
|
||||
BytesRef br = new BytesRef();
|
||||
int tord = -1;
|
||||
// if no values in the segment, default trueOrd to something other then -1 (missing)
|
||||
int tord = -2;
|
||||
for (int i=0; i<nord; i++) {
|
||||
sindex.lookupOrd(i, br);
|
||||
if (br.length==1 && br.bytes[br.offset]=='T') {
|
||||
|
|
|
@ -723,4 +723,32 @@ public class TestFunctionQuery extends SolrTestCaseJ4 {
|
|||
, "/response/docs/[0]=={'a':1, 'b':2.0,'c':'X','d':'A'}");
|
||||
}
|
||||
|
||||
public void testMissingFieldFunctionBehavior() throws Exception {
|
||||
clearIndex();
|
||||
// add a doc that has no values in any interesting fields
|
||||
assertU(adoc("id", "1"));
|
||||
assertU(commit());
|
||||
|
||||
// it's important that these functions not only use fields that
|
||||
// out doc have no values for, but also that that no other doc ever added
|
||||
// to the index might have ever had a value for, so that the segment
|
||||
// term metadata doesn't exist
|
||||
|
||||
for (String suffix : new String[] {"s", "b", "dt", "tdt",
|
||||
"i", "l", "f", "d",
|
||||
"pi", "pl", "pf", "pd",
|
||||
"ti", "tl", "tf", "td" }) {
|
||||
final String field = "no__vals____" + suffix;
|
||||
assertQ(req("q","id:1",
|
||||
"fl","noval_if:if("+field+",42,-99)",
|
||||
"fl","noval_def:def("+field+",-99)",
|
||||
"fl","noval_not:not("+field+")",
|
||||
"fl","noval_exists:exists("+field+")"),
|
||||
"//long[@name='noval_if']='-99'",
|
||||
"//long[@name='noval_def']='-99'",
|
||||
"//bool[@name='noval_not']='true'",
|
||||
"//bool[@name='noval_exists']='false'");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue