[hibernate-commits] Hibernate SVN: r18505 - in search/trunk: src/main/java/org/hibernate/search/filter and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Jan 11 12:11:03 EST 2010


Author: sannegrinovero
Date: 2010-01-11 12:11:03 -0500 (Mon, 11 Jan 2010)
New Revision: 18505

Removed:
   search/trunk/src/main/java/org/hibernate/search/filter/EmptyDocIdBitSet.java
Modified:
   search/trunk/pom.xml
   search/trunk/src/main/java/org/hibernate/search/filter/AndDocIdSet.java
   search/trunk/src/test/java/org/hibernate/search/test/FSDirectoryTest.java
   search/trunk/src/test/java/org/hibernate/search/test/filter/AndDocIdSetsTest.java
   search/trunk/src/test/java/org/hibernate/search/test/filter/ExcludeAllFilter.java
   search/trunk/src/test/java/org/hibernate/search/test/filter/FiltersOptimizationTest.java
   search/trunk/src/test/java/org/hibernate/search/test/filter/InstanceBasedExcludeAllFilter.java
Log:
HSEARCH-442 Upgrade existing code to Lucene 2.9.1

Modified: search/trunk/pom.xml
===================================================================
--- search/trunk/pom.xml	2010-01-11 01:20:16 UTC (rev 18504)
+++ search/trunk/pom.xml	2010-01-11 17:11:03 UTC (rev 18505)
@@ -115,7 +115,7 @@
 
     <properties>
         <slf4jVersion>1.5.8</slf4jVersion>
-        <luceneVersion>2.4.1</luceneVersion>
+        <luceneVersion>2.9.1</luceneVersion>
         <hibernateVersion>3.5.0-SNAPSHOT</hibernateVersion>
         <hibernateCommonsAnnotationVersion>3.2.0.Beta1</hibernateCommonsAnnotationVersion>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

Modified: search/trunk/src/main/java/org/hibernate/search/filter/AndDocIdSet.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/filter/AndDocIdSet.java	2010-01-11 01:20:16 UTC (rev 18504)
+++ search/trunk/src/main/java/org/hibernate/search/filter/AndDocIdSet.java	2010-01-11 17:11:03 UTC (rev 18505)
@@ -80,11 +80,11 @@
 		//iterator initialize, just one "next" for each DocIdSetIterator
 		for ( ; i<iteratorSize; i++ ) {
 			final DocIdSetIterator iterator = iterators[i];
-			if ( ! iterator.next() ) {
+			final int position = iterator.nextDoc();
+			if ( position==DocIdSetIterator.NO_MORE_DOCS ) {
 				//current iterator has no values, so skip all
-				return EmptyDocIdBitSet.instance;
+				return DocIdSet.EMPTY_DOCIDSET;
 			}
-			final int position = iterator.doc();
 			if ( targetPosition==position ) {
 				votes++; //stopped as same position of others
 			}
@@ -100,15 +100,14 @@
 			result.fastSet( targetPosition );
 			targetPosition++;
 		}
-		i=0;
-		votes=0; //could be smarted but would make the code even more complex for a minor optimization out of cycle.
+		i = 0;
+		votes = 0; //could be smarter but would make the code even more complex for a minor optimization out of cycle.
 		// enter main loop:
 		while ( true ) {
 			final DocIdSetIterator iterator = iterators[i];
-			final boolean validPosition = iterator.skipTo( targetPosition );
-			if ( ! validPosition )
+			final int position = iterator.advance( targetPosition );
+			if ( position==DocIdSetIterator.NO_MORE_DOCS )
 				return result; //exit condition
-			final int position = iterator.doc();
 			if ( position == targetPosition ) {
 				if ( ++votes == iteratorSize ) {
 					result.fastSet( position );
@@ -125,40 +124,13 @@
 	}
 
 	@Override
-	public DocIdSetIterator iterator() {
-		return new AndingDocIdSetIterator();
+	public DocIdSetIterator iterator() throws IOException {
+		return buildBitset().iterator();
 	}
 	
-	private class AndingDocIdSetIterator extends DocIdSetIterator {
-
-		private DocIdSetIterator iterator;
-
-		@Override
-		public int doc() {
-			// should never happen when respecting interface contract; otherwise I
-			// prefer a NPE than a hard to debug return 0.
-			assert iterator != null : "Illegal state, can't be called before next() or skipTo(int)";
-			return iterator.doc();
-		}
-
-		@Override
-		public boolean next() throws IOException {
-			ensureInitialized(); //can't initialize before as it would not be allowed to throw IOException
-			return iterator.next();
-		}
-
-		@Override
-		public boolean skipTo(int target) throws IOException {
-			ensureInitialized(); //can't initialize before as it would not be allowed to throw IOException
-			return iterator.skipTo( target );
-		}
-		
-		private final void ensureInitialized() throws IOException {
-			if ( iterator == null ) {
-				iterator = buildBitset().iterator();
-			}
-		}
-		
+	@Override
+	public boolean isCacheable() {
+		return true;
 	}
 	
 }

Deleted: search/trunk/src/main/java/org/hibernate/search/filter/EmptyDocIdBitSet.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/filter/EmptyDocIdBitSet.java	2010-01-11 01:20:16 UTC (rev 18504)
+++ search/trunk/src/main/java/org/hibernate/search/filter/EmptyDocIdBitSet.java	2010-01-11 17:11:03 UTC (rev 18505)
@@ -1,78 +0,0 @@
-/* $Id$
- * 
- * Hibernate, Relational Persistence for Idiomatic Java
- * 
- * Copyright (c) 2009, Red Hat, Inc. and/or its affiliates or third-party contributors as
- * indicated by the @author tags or express copyright attribution
- * statements applied by the authors.  All third-party contributions are
- * distributed under license by Red Hat, Inc.
- * 
- * This copyrighted material is made available to anyone wishing to use, modify,
- * copy, or redistribute it subject to the terms and conditions of the GNU
- * Lesser General Public License, as published by the Free Software Foundation.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- * for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public License
- * along with this distribution; if not, write to:
- * Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor
- * Boston, MA  02110-1301  USA
- */
-package org.hibernate.search.filter;
-
-import java.io.Serializable;
-
-import org.apache.lucene.search.DocIdSet;
-import org.apache.lucene.search.DocIdSetIterator;
-
-/**
- * A DocIdSet which is always empty.
- * Stateless and ThreadSafe.
- * 
- * @author Sanne Grinovero
- */
-public final class EmptyDocIdBitSet extends DocIdSet implements Serializable {
-
-	private static final long serialVersionUID = 6429929383767238322L;
-
-	public static final DocIdSet instance = new EmptyDocIdBitSet();
-	
-	private static final DocIdSetIterator iterator = new EmptyDocIdSetIterator();
-	
-	private EmptyDocIdBitSet(){
-		// is singleton
-	}
-
-	@Override
-	public final DocIdSetIterator iterator() {
-		return iterator;
-	}
-
-	/**
-	 * implements a DocIdSetIterator for an empty DocIdSet
-	 * As it is empty it also is stateless and so it can be reused.
-	 */
-	private static final class EmptyDocIdSetIterator extends DocIdSetIterator {
-
-		@Override
-		public final int doc() {
-			throw new IllegalStateException( "Should never be called" );
-		}
-
-		@Override
-		public final boolean next() {
-			return false;
-		}
-
-		@Override
-		public final boolean skipTo(int target) {
-			return false;
-		}
-
-	}
-	
-}

Modified: search/trunk/src/test/java/org/hibernate/search/test/FSDirectoryTest.java
===================================================================
--- search/trunk/src/test/java/org/hibernate/search/test/FSDirectoryTest.java	2010-01-11 01:20:16 UTC (rev 18504)
+++ search/trunk/src/test/java/org/hibernate/search/test/FSDirectoryTest.java	2010-01-11 17:11:03 UTC (rev 18505)
@@ -81,9 +81,11 @@
 			int num = reader.numDocs();
 			assertEquals( 1, num );
 			TermDocs docs = reader.termDocs( new Term( "Abstract", "Hibernate" ) );
+			docs.next();
 			org.apache.lucene.document.Document doc = reader.document( docs.doc() );
 			assertFalse( docs.next() );
 			docs = reader.termDocs( new Term( "Title", "Action" ) );
+			docs.next();
 			doc = reader.document( docs.doc() );
 			assertFalse( docs.next() );
 			assertEquals( "1", doc.getField( "id" ).stringValue() );

Modified: search/trunk/src/test/java/org/hibernate/search/test/filter/AndDocIdSetsTest.java
===================================================================
--- search/trunk/src/test/java/org/hibernate/search/test/filter/AndDocIdSetsTest.java	2010-01-11 01:20:16 UTC (rev 18504)
+++ search/trunk/src/test/java/org/hibernate/search/test/filter/AndDocIdSetsTest.java	2010-01-11 17:11:03 UTC (rev 18505)
@@ -97,10 +97,10 @@
 	public void testIteratorMatchesTestArray() throws IOException {
 		DocIdSet docIdSet0_9 = arrayToDocIdSet(testDataFrom0to9);
 		DocIdSetIterator docIdSetIterator = docIdSet0_9.iterator();
-		assertTrue( docIdSetIterator.next() );
-		assertEquals( 0, docIdSetIterator.doc() );
-		assertTrue( docIdSetIterator.skipTo(9) );
-		assertFalse( docIdSetIterator.skipTo(10) );
+		assertTrue( docIdSetIterator.nextDoc() != DocIdSetIterator.NO_MORE_DOCS );
+		assertEquals( 0, docIdSetIterator.docID() );
+		assertEquals( 9, docIdSetIterator.advance(9) );
+		assertEquals( DocIdSetIterator.NO_MORE_DOCS, docIdSetIterator.advance(10) );
 	}
 	
 	public void testAndDocIdSets() {
@@ -180,13 +180,13 @@
 		System.out.println(" Results are same: " + docIdSetsEqual( andedByBitsResult, andedByIterationResult ) );
 	}
 
-	private static int iterateOnResults(DocIdSet docIdBitSet) throws IOException {
+	private static void iterateOnResults(DocIdSet docIdBitSet) throws IOException {
 		DocIdSetIterator iterator = docIdBitSet.iterator();
-		int i = 0;
-		while ( iterator.next() ) {
-			i += iterator.doc();
+		int currentDoc;
+		do {
+			currentDoc = iterator.nextDoc();
 		}
-		return i;
+		while ( currentDoc != DocIdSetIterator.NO_MORE_DOCS );
 	}
 
 	private static final BitSet applyANDOnBitSets(final List<BitSet> filtersData) {
@@ -237,29 +237,24 @@
 	}
 	
 	/**
-	 * @param a
-	 * @param b
+	 * @param expected
+	 * @param tested
 	 * @return true if the two DocIdSet are equal: contain the same number of ids, same order and all are equal
 	 */
 	public static final boolean docIdSetsEqual(DocIdSet expected, DocIdSet tested) {
-		DocIdSetIterator iterA = expected.iterator();
-		DocIdSetIterator iterB = tested.iterator();
-		boolean nextA = false;
-		boolean nextB = false;
 		try{
+			DocIdSetIterator iterA = expected.iterator();
+			DocIdSetIterator iterB = tested.iterator();
+			int nextA;
+			int nextB;
 			do {
-				nextA = iterA.next();
-				nextB = iterB.next();
-				if ( nextA!=nextB ) {
+				nextA = iterA.nextDoc();
+				nextB = iterB.nextDoc();
+				if ( nextA != nextB ) {
 					return false;
 				}
-				else if ( nextA==false) {
-					return true;
-				}
-				else if ( iterA.doc() != iterB.doc() ) {
-					return false;
-				}
-			} while ( nextA && nextB );
+				assertEquals( iterA.docID(), iterB.docID() );
+			} while ( nextA !=  DocIdSetIterator.NO_MORE_DOCS );
 		}
 		catch (IOException ioe) {
 			fail( "these DocIdSetIterator instances should not throw any exceptions" );

Modified: search/trunk/src/test/java/org/hibernate/search/test/filter/ExcludeAllFilter.java
===================================================================
--- search/trunk/src/test/java/org/hibernate/search/test/filter/ExcludeAllFilter.java	2010-01-11 01:20:16 UTC (rev 18504)
+++ search/trunk/src/test/java/org/hibernate/search/test/filter/ExcludeAllFilter.java	2010-01-11 17:11:03 UTC (rev 18505)
@@ -31,8 +31,6 @@
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.index.IndexReader;
 
-import org.hibernate.search.filter.EmptyDocIdBitSet;
-
 /**
  * @author Emmanuel Bernard
  */
@@ -58,6 +56,6 @@
 			throw new IllegalStateException( "Called twice" );
 		}
 		done = true;
-		return EmptyDocIdBitSet.instance;
+		return DocIdSet.EMPTY_DOCIDSET;
 	}
 }

Modified: search/trunk/src/test/java/org/hibernate/search/test/filter/FiltersOptimizationTest.java
===================================================================
--- search/trunk/src/test/java/org/hibernate/search/test/filter/FiltersOptimizationTest.java	2010-01-11 01:20:16 UTC (rev 18504)
+++ search/trunk/src/test/java/org/hibernate/search/test/filter/FiltersOptimizationTest.java	2010-01-11 17:11:03 UTC (rev 18505)
@@ -194,7 +194,7 @@
 		}
 		
 		@Override
-		public DocIdSetIterator iterator() {
+		public DocIdSetIterator iterator() throws IOException {
 			return bitSet.iterator();
 		}
 		

Modified: search/trunk/src/test/java/org/hibernate/search/test/filter/InstanceBasedExcludeAllFilter.java
===================================================================
--- search/trunk/src/test/java/org/hibernate/search/test/filter/InstanceBasedExcludeAllFilter.java	2010-01-11 01:20:16 UTC (rev 18504)
+++ search/trunk/src/test/java/org/hibernate/search/test/filter/InstanceBasedExcludeAllFilter.java	2010-01-11 17:11:03 UTC (rev 18505)
@@ -31,8 +31,6 @@
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.search.DocIdSet;
 
-import org.hibernate.search.filter.EmptyDocIdBitSet;
-
 /**
  * @author Emmanuel Bernard
  */
@@ -55,6 +53,6 @@
 			throw new IllegalStateException( "Called twice" );
 		}
 		done = true;
-		return EmptyDocIdBitSet.instance;
+		return DocIdSet.EMPTY_DOCIDSET;
 	}
 }



More information about the hibernate-commits mailing list