You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2011/11/30 12:08:48 UTC
svn commit: r1208381 - in /lucene/dev/trunk: ./
dev-tools/idea/lucene/contrib/ lucene/ lucene/contrib/
lucene/contrib/sandbox/src/test/org/apache/lucene/sandbox/queries/regex/
lucene/src/java/org/apache/lucene/index/codecs/lucene3x/ modules/benchmark/
...
Author: uschindler
Date: Wed Nov 30 11:08:45 2011
New Revision: 1208381
URL: http://svn.apache.org/viewvc?rev=1208381&view=rev
Log:
Merged revision(s) 1208375 from lucene/dev/branches/branch_3x:
LUCENE-3609: Fix regression in BooleanFilter, introduced in Lucene 3.5, to correctly handle minShouldMatch behaviour of previous versions
Modified:
lucene/dev/trunk/ (props changed)
lucene/dev/trunk/dev-tools/idea/lucene/contrib/ (props changed)
lucene/dev/trunk/lucene/ (props changed)
lucene/dev/trunk/lucene/contrib/CHANGES.txt
lucene/dev/trunk/lucene/contrib/sandbox/src/test/org/apache/lucene/sandbox/queries/regex/TestSpanRegexQuery.java (props changed)
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/lucene3x/TermInfosReaderIndex.java (props changed)
lucene/dev/trunk/modules/benchmark/ (props changed)
lucene/dev/trunk/modules/facet/ (props changed)
lucene/dev/trunk/modules/queries/src/java/org/apache/lucene/queries/BooleanFilter.java
lucene/dev/trunk/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java
lucene/dev/trunk/modules/queryparser/src/test/org/apache/lucene/queryparser/xml/builders/TestNumericRangeFilterBuilder.java (props changed)
lucene/dev/trunk/solr/ (props changed)
lucene/dev/trunk/solr/CHANGES.txt (props changed)
lucene/dev/trunk/solr/LICENSE.txt (props changed)
lucene/dev/trunk/solr/NOTICE.txt (props changed)
lucene/dev/trunk/solr/README.txt (props changed)
lucene/dev/trunk/solr/build.xml (props changed)
lucene/dev/trunk/solr/client/ (props changed)
lucene/dev/trunk/solr/common-build.xml (props changed)
lucene/dev/trunk/solr/contrib/ (props changed)
lucene/dev/trunk/solr/contrib/clustering/src/test-files/ (props changed)
lucene/dev/trunk/solr/contrib/dataimporthandler-extras/src/java/ (props changed)
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/ (props changed)
lucene/dev/trunk/solr/contrib/dataimporthandler/src/test-files/ (props changed)
lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/ (props changed)
lucene/dev/trunk/solr/contrib/uima/src/java/ (props changed)
lucene/dev/trunk/solr/contrib/uima/src/test-files/ (props changed)
lucene/dev/trunk/solr/core/ (props changed)
lucene/dev/trunk/solr/core/src/java/ (props changed)
lucene/dev/trunk/solr/core/src/test/ (props changed)
lucene/dev/trunk/solr/dev-tools/ (props changed)
lucene/dev/trunk/solr/example/ (props changed)
lucene/dev/trunk/solr/lib/ (props changed)
lucene/dev/trunk/solr/scripts/ (props changed)
lucene/dev/trunk/solr/site/ (props changed)
lucene/dev/trunk/solr/site-src/ (props changed)
lucene/dev/trunk/solr/solrj/ (props changed)
lucene/dev/trunk/solr/solrj/src/java/ (props changed)
lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/ (props changed)
lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/ (props changed)
lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/common/ (props changed)
lucene/dev/trunk/solr/test-framework/ (props changed)
lucene/dev/trunk/solr/testlogging.properties (props changed)
lucene/dev/trunk/solr/webapp/ (props changed)
Modified: lucene/dev/trunk/lucene/contrib/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/CHANGES.txt?rev=1208381&r1=1208380&r2=1208381&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/contrib/CHANGES.txt Wed Nov 30 11:08:45 2011
@@ -92,6 +92,10 @@ Bug Fixes
assert if such a parent doc was the first doc in the segment).
(Shay Banon, Mike McCandless)
+ * LUCENE-3609: Fix regression in BooleanFilter, introduced in Lucene 3.5,
+ to correctly handle minShouldMatch behaviour of previous versions.
+ (Shay Banon, Uwe Schindler)
+
Documentation
* LUCENE-3599: Javadocs for DistanceUtils.haversine() were incorrectly
Modified: lucene/dev/trunk/modules/queries/src/java/org/apache/lucene/queries/BooleanFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/modules/queries/src/java/org/apache/lucene/queries/BooleanFilter.java?rev=1208381&r1=1208380&r2=1208381&view=diff
==============================================================================
--- lucene/dev/trunk/modules/queries/src/java/org/apache/lucene/queries/BooleanFilter.java (original)
+++ lucene/dev/trunk/modules/queries/src/java/org/apache/lucene/queries/BooleanFilter.java Wed Nov 30 11:08:45 2011
@@ -54,8 +54,10 @@ public class BooleanFilter extends Filte
FixedBitSet res = null;
final IndexReader reader = context.reader;
+ boolean hasShouldClauses = false;
for (final FilterClause fc : clauses) {
if (fc.getOccur() == Occur.SHOULD) {
+ hasShouldClauses = true;
final DocIdSetIterator disi = getDISI(fc.getFilter(), context);
if (disi == null) continue;
if (res == null) {
@@ -64,10 +66,13 @@ public class BooleanFilter extends Filte
res.or(disi);
}
}
+ if (hasShouldClauses && res == null)
+ return DocIdSet.EMPTY_DOCIDSET;
for (final FilterClause fc : clauses) {
if (fc.getOccur() == Occur.MUST_NOT) {
if (res == null) {
+ assert !hasShouldClauses;
res = new FixedBitSet(reader.maxDoc());
res.set(0, reader.maxDoc()); // NOTE: may set bits on deleted docs
}
Modified: lucene/dev/trunk/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java?rev=1208381&r1=1208380&r2=1208381&view=diff
==============================================================================
--- lucene/dev/trunk/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java (original)
+++ lucene/dev/trunk/modules/queries/src/test/org/apache/lucene/queries/BooleanFilterTest.java Wed Nov 30 11:08:45 2011
@@ -36,6 +36,7 @@ import org.apache.lucene.search.TermQuer
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.LuceneTestCase;
import java.io.IOException;
@@ -92,6 +93,15 @@ public class BooleanFilterTest extends L
return new QueryWrapperFilter(new TermQuery(new Term(field, text)));
}
+ private Filter getEmptyFilter() {
+ return new Filter() {
+ @Override
+ public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) {
+ return new FixedBitSet(context.reader.maxDoc());
+ }
+ };
+ }
+
private Filter getNullDISFilter() {
return new Filter() {
@Override
@@ -309,4 +319,21 @@ public class BooleanFilterTest extends L
booleanFilter.add(getNullDISIFilter(), Occur.MUST_NOT);
tstFilterCard("A single MUST_NOT filter that returns a null DIS should be invisible", 5, booleanFilter);
}
+
+ public void testNonMatchingShouldsAndMusts() throws Exception {
+ BooleanFilter booleanFilter = new BooleanFilter();
+ booleanFilter.add(getEmptyFilter(), Occur.SHOULD);
+ booleanFilter.add(getTermsFilter("accessRights", "admin"), Occur.MUST);
+ tstFilterCard(">0 shoulds with no matches should return no docs", 0, booleanFilter);
+
+ booleanFilter = new BooleanFilter();
+ booleanFilter.add(getNullDISFilter(), Occur.SHOULD);
+ booleanFilter.add(getTermsFilter("accessRights", "admin"), Occur.MUST);
+ tstFilterCard(">0 shoulds with no matches should return no docs", 0, booleanFilter);
+
+ booleanFilter = new BooleanFilter();
+ booleanFilter.add(getNullDISIFilter(), Occur.SHOULD);
+ booleanFilter.add(getTermsFilter("accessRights", "admin"), Occur.MUST);
+ tstFilterCard(">0 shoulds with no matches should return no docs", 0, booleanFilter);
+ }
}