[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