You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by do...@apache.org on 2007/12/30 23:48:00 UTC
svn commit: r607606 - in /lucene/java/trunk: CHANGES.txt
contrib/miscellaneous/src/java/org/apache/lucene/misc/ChainedFilter.java
contrib/miscellaneous/src/test/org/apache/lucene/misc/ChainedFilterTest.java
Author: doronc
Date: Sun Dec 30 14:47:59 2007
New Revision: 607606
URL: http://svn.apache.org/viewvc?rev=607606&view=rev
Log:
LUCENE-749: ChainedFilter behavior fixed when logic of first filter is ANDNOT.
Modified:
lucene/java/trunk/CHANGES.txt
lucene/java/trunk/contrib/miscellaneous/src/java/org/apache/lucene/misc/ChainedFilter.java
lucene/java/trunk/contrib/miscellaneous/src/test/org/apache/lucene/misc/ChainedFilterTest.java
Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=607606&r1=607605&r2=607606&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Sun Dec 30 14:47:59 2007
@@ -207,6 +207,9 @@
this flag to true fixes the problem. This flag is a temporary fix and is already
marked as being deprecated. 3.x will implement the correct approach. (Shai Erera via Grant Ingersoll)
+28. LUCENE-749: ChainedFilter behavior fixed when logic of
+ first filter is ANDNOT. (Antonio Bruno via Doron Cohen)
+
New features
Modified: lucene/java/trunk/contrib/miscellaneous/src/java/org/apache/lucene/misc/ChainedFilter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/miscellaneous/src/java/org/apache/lucene/misc/ChainedFilter.java?rev=607606&r1=607605&r2=607606&view=diff
==============================================================================
--- lucene/java/trunk/contrib/miscellaneous/src/java/org/apache/lucene/misc/ChainedFilter.java (original)
+++ lucene/java/trunk/contrib/miscellaneous/src/java/org/apache/lucene/misc/ChainedFilter.java Sun Dec 30 14:47:59 2007
@@ -177,6 +177,12 @@
result = (BitSet) chain[i].bits(reader).clone();
++i;
}
+ else if (logic == ANDNOT)
+ {
+ result = (BitSet) chain[i].bits(reader).clone();
+ result.flip(0,reader.maxDoc());
+ ++i;
+ }
else
{
result = new BitSet(reader.maxDoc());
@@ -210,6 +216,12 @@
if (logic[0] == AND)
{
result = (BitSet) chain[i].bits(reader).clone();
+ ++i;
+ }
+ else if (logic[0] == ANDNOT)
+ {
+ result = (BitSet) chain[i].bits(reader).clone();
+ result.flip(0,reader.maxDoc());
++i;
}
else
Modified: lucene/java/trunk/contrib/miscellaneous/src/test/org/apache/lucene/misc/ChainedFilterTest.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/miscellaneous/src/test/org/apache/lucene/misc/ChainedFilterTest.java?rev=607606&r1=607605&r2=607606&view=diff
==============================================================================
--- lucene/java/trunk/contrib/miscellaneous/src/test/org/apache/lucene/misc/ChainedFilterTest.java (original)
+++ lucene/java/trunk/contrib/miscellaneous/src/test/org/apache/lucene/misc/ChainedFilterTest.java Sun Dec 30 14:47:59 2007
@@ -90,6 +90,16 @@
chain = new ChainedFilter(new Filter[] {bobFilter});
hits = searcher.search(query, chain);
assertEquals(MAX / 2, hits.length());
+
+ chain = new ChainedFilter(new Filter[] {bobFilter}, new int[] {ChainedFilter.AND});
+ hits = searcher.search(query, chain);
+ assertEquals(MAX / 2, hits.length());
+ assertEquals("bob", hits.doc(0).get("owner"));
+
+ chain = new ChainedFilter(new Filter[] {bobFilter}, new int[] {ChainedFilter.ANDNOT});
+ hits = searcher.search(query, chain);
+ assertEquals(MAX / 2, hits.length());
+ assertEquals("sue", hits.doc(0).get("owner"));
}
public void testOR() throws Exception {
@@ -127,6 +137,15 @@
assertEquals("ANDNOT matches just bob",
MAX / 2, hits.length());
assertEquals("bob", hits.doc(0).get("owner"));
+
+ chain = new ChainedFilter(
+ new Filter[]{bobFilter, bobFilter},
+ new int[] {ChainedFilter.ANDNOT, ChainedFilter.ANDNOT});
+
+ hits = searcher.search(query, chain);
+ assertEquals("ANDNOT bob ANDNOT bob matches all sues",
+ MAX / 2, hits.length());
+ assertEquals("sue", hits.doc(0).get("owner"));
}
private Date parseDate(String s) throws ParseException {