Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

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

hibernate-commits

2008-10-15


Author LoginPost Reply
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)
@@(protected) @@
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;
@@(protected) @@
     }
     //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)
@@(protected) @@
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)
@@(protected) @@
*/
class PurgeAllWorkDelegate implements LuceneWorkDelegate {
 
-  private final Logger log = LoggerFactory.getLogger( AddWorkDelegate.class );
+  private final Logger log = LoggerFactory.getLogger( PurgeAllWorkDelegate.class );

 PurgeAllWorkDelegate() {
 }

_______________________________________________
hibernate-commits mailing list
hibernate-commits@(protected)
https://lists.jboss.org/mailman/listinfo/hibernate-commits
©2008 gg3721.com - Jax Systems, LLC, U.S.A.