[hibernate-commits] Hibernate SVN: r15353 - search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Oct 15 10:42:25 EDT 2008


Author: hardy.ferentschik
Date: 2008-10-15 10:42:24 -0400 (Wed, 15 Oct 2008)
New Revision: 15353

Modified:
   search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/DeleteWorkDelegate.java
   search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/OptimizeWorkDelegate.java
   search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/PurgeAllWorkDelegate.java
Log:
HSEARCH-225
Switched to IndexWriter to delete documents by query.

Modified: search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/DeleteWorkDelegate.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/DeleteWorkDelegate.java	2008-10-15 13:26:37 UTC (rev 15352)
+++ search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/DeleteWorkDelegate.java	2008-10-15 14:42:24 UTC (rev 15353)
@@ -6,47 +6,76 @@
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermDocs;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.search.BooleanClause;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.hibernate.search.SearchException;
 import org.hibernate.search.backend.LuceneWork;
 import org.hibernate.search.backend.Workspace;
 import org.hibernate.search.backend.impl.lucene.IndexInteractionType;
 import org.hibernate.search.engine.DocumentBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
-* Stateless implementation that performs a DeleteLuceneWork.
-* @see LuceneWorkVisitor
-* @see LuceneWorkDelegate
-* @author Emmanuel Bernard
-* @author Hardy Ferentschik
-* @author John Griffin
-* @author Sanne Grinovero
-*/
+ * Stateless implementation that performs a <code>DeleteLuceneWork</code>.
+ *
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ * @author John Griffin
+ * @author Sanne Grinovero
+ * @see LuceneWorkVisitor
+ * @see LuceneWorkDelegate
+ */
 class DeleteWorkDelegate implements LuceneWorkDelegate {
-	
+
 	private final Workspace workspace;
-	private final Logger log = LoggerFactory.getLogger( AddWorkDelegate.class );
+	private final Logger log = LoggerFactory.getLogger( DeleteWorkDelegate.class );
 
 	DeleteWorkDelegate(Workspace workspace) {
 		this.workspace = workspace;
 	}
 
 	public IndexInteractionType getIndexInteractionType() {
-		return IndexInteractionType.NEEDS_INDEXREADER;
+		return IndexInteractionType.NEEDS_INDEXWRITER;
 	}
 
 	public void performWork(LuceneWork work, IndexWriter writer) {
-		throw new UnsupportedOperationException();
+		log.trace( "Removing {}#{} by query.", work.getEntityClass(), work.getId() );
+		DocumentBuilder builder = workspace.getDocumentBuilder( work.getEntityClass() );
+
+		BooleanQuery entityDeltionQuery = new BooleanQuery();
+
+		TermQuery idQueryTerm = new TermQuery( builder.getTerm( work.getId() ) );
+		entityDeltionQuery.add(idQueryTerm, BooleanClause.Occur.MUST);
+
+		Term classNameQueryTerm =  new Term(DocumentBuilder.CLASS_FIELDNAME, work.getEntityClass().getName());
+		TermQuery classNameQuery = new TermQuery( classNameQueryTerm);
+		entityDeltionQuery.add(classNameQuery, BooleanClause.Occur.MUST);
+
+		try {
+			writer.deleteDocuments( entityDeltionQuery );
+		}
+		catch ( Exception e ) {
+			String message = "Unable to remove " + work.getEntityClass() + "#" + work.getId() + " from index.";
+			throw new SearchException( message, e );
+		}
 	}
 
+	/*
+	 * This method is obsolete and was used pre Lucene 2.4. Now we are using IndexWriter.deleteDocuments(Query) to
+	 * delete index documents.
+	 *
+	 * This method might be deleted at some stage. (hardy)
+	 */
 	public void performWork(LuceneWork work, IndexReader reader) {
 		/**
 		 * even with Lucene 2.1, use of indexWriter to delete is not an option
 		 * We can only delete by term, and the index doesn't have a term that
 		 * uniquely identify the entry. See logic below
 		 */
-		log.trace( "remove from Lucene index: {}#{}", work.getEntityClass(), work.getId() );
+		log.trace( "Removing {}#{} from Lucene index.", work.getEntityClass(), work.getId() );
 		DocumentBuilder builder = workspace.getDocumentBuilder( work.getEntityClass() );
 		Term term = builder.getTerm( work.getId() );
 		TermDocs termDocs = null;
@@ -65,18 +94,22 @@
 			}
 			//TODO shouldn't this use workspace.incrementModificationCounter( 1 ) ? 
 		}
-		catch (Exception e) {
-			throw new SearchException( "Unable to remove from Lucene index: "
-					+ work.getEntityClass() + "#" + work.getId(), e );
+		catch ( Exception e ) {
+			throw new SearchException(
+					"Unable to remove from Lucene index: "
+							+ work.getEntityClass() + "#" + work.getId(), e
+			);
 		}
 		finally {
-			if ( termDocs != null ) try {
-				termDocs.close();
+			if ( termDocs != null ) {
+				try {
+					termDocs.close();
+				}
+				catch ( IOException e ) {
+					log.warn( "Unable to close termDocs properly", e );
+				}
 			}
-			catch (IOException e) {
-				log.warn( "Unable to close termDocs properly", e );
-			}
 		}
 	}
-	
+
 }

Modified: search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/OptimizeWorkDelegate.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/OptimizeWorkDelegate.java	2008-10-15 13:26:37 UTC (rev 15352)
+++ search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/OptimizeWorkDelegate.java	2008-10-15 14:42:24 UTC (rev 15353)
@@ -23,7 +23,7 @@
 class OptimizeWorkDelegate implements LuceneWorkDelegate {
 	
 	private final Workspace workspace;
-	private final Logger log = LoggerFactory.getLogger( AddWorkDelegate.class );
+	private final Logger log = LoggerFactory.getLogger( OptimizeWorkDelegate.class );
 
 	OptimizeWorkDelegate(Workspace workspace) {
 		this.workspace = workspace;

Modified: search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/PurgeAllWorkDelegate.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/PurgeAllWorkDelegate.java	2008-10-15 13:26:37 UTC (rev 15352)
+++ search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/PurgeAllWorkDelegate.java	2008-10-15 14:42:24 UTC (rev 15353)
@@ -21,7 +21,7 @@
 */
 class PurgeAllWorkDelegate implements LuceneWorkDelegate {
 	
-	private final Logger log = LoggerFactory.getLogger( AddWorkDelegate.class );
+	private final Logger log = LoggerFactory.getLogger( PurgeAllWorkDelegate.class );
 
 	PurgeAllWorkDelegate() {
 	}




More information about the hibernate-commits mailing list