[hibernate-commits] Hibernate SVN: r15547 - in search/trunk/src: java/org/hibernate/search/backend/impl/lucene and 7 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Nov 11 07:57:47 EST 2008


Author: hardy.ferentschik
Date: 2008-11-11 07:57:47 -0500 (Tue, 11 Nov 2008)
New Revision: 15547

Modified:
   search/trunk/src/java/org/hibernate/search/backend/Workspace.java
   search/trunk/src/java/org/hibernate/search/backend/impl/lucene/PerDPQueueProcessor.java
   search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
   search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java
   search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
   search/trunk/src/test/org/hibernate/search/test/analyzer/AbstractTestAnalyzer.java
   search/trunk/src/test/org/hibernate/search/test/filter/BestDriversFilter.java
   search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilter.java
   search/trunk/src/test/org/hibernate/search/test/filter/InstanceBasedExcludeAllFilter.java
   search/trunk/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java
   search/trunk/src/test/org/hibernate/search/test/reader/performance/IndexFillRunnable.java
   search/trunk/src/test/org/hibernate/search/test/reader/performance/ReaderPerformance.java
   search/trunk/src/test/org/hibernate/search/test/util/AnalyzerUtils.java
Log:
HSEARCH-283
* Updated deprecated field constants
* changed IndexWriter constructor

Modified: search/trunk/src/java/org/hibernate/search/backend/Workspace.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/Workspace.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/java/org/hibernate/search/backend/Workspace.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -25,11 +25,11 @@
 /**
  * Lucene workspace for a DirectoryProvider.<p/>
  * <ul>
- * <li>Before using getIndexWriter or getIndexReader the lock must be acquired, and resources must be closed
- * before releasing the lock.</li>
+ * <li>Before using {@link #getIndexWriter} or {@link #getIndexReader} the lock must be acquired,
+ * and resources must be closed before releasing the lock.</li>
  * <li>One cannot get an IndexWriter when an IndexReader has been acquired and not closed, and vice-versa.</li>
- * <li>The recommended approach is to execute all the modifications on the IndexReader, and after that on
- * the IndexWriter</li>
+ * <li>The recommended approach is to execute all the modifications on the <code>IndexReader</code>, and after that on
+ * the <code>IndexWriter</code></li>.
  * </ul>
  *
  * @author Emmanuel Bernard
@@ -173,8 +173,8 @@
 			return writer;
 		try {
 			// don't care about the Analyzer as it will be selected during usage of IndexWriter.
-			//FIXME use the non deprecated constructor => requires to call #Commit()
-			writer = new IndexWriter( directoryProvider.getDirectory(), SIMPLE_ANALYZER, false ); // has been created at init time
+			IndexWriter.MaxFieldLength fieldLength = new IndexWriter.MaxFieldLength( IndexWriter.DEFAULT_MAX_FIELD_LENGTH );
+			writer = new IndexWriter( directoryProvider.getDirectory(), SIMPLE_ANALYZER, false, fieldLength ); // has been created at init time
 			indexingParams.applyToWriter( writer, batchmode );
 			log.trace( "IndexWriter opened" );
 		}
@@ -186,6 +186,30 @@
 	}
 
 	/**
+	 * Commits changes to a previously opened index writer.
+	 *
+	 * @throws SearchException on IOException during Lucene close operation.
+	 * @throws AssertionFailure if there is no IndexWriter to close, or if the lock is not owned.
+	 */
+	public synchronized void commitIndexWriter() {
+		assertOwnLock();
+		if ( writer != null ) {
+			try {
+				writer.commit();
+				log.trace( "Index changes commited." );
+			}
+			catch ( IOException e ) {
+				throw new SearchException( "Exception while commiting index changes", e );
+			}
+		}
+		else {
+			throw new AssertionFailure( "No open IndexWriter to commit changes." );
+		}
+	}
+
+
+
+	/**
 	 * Closes a previously opened IndexWriter.
 	 * @throws SearchException on IOException during Lucene close operation.
 	 * @throws AssertionFailure if there is no IndexWriter to close, or if the lock is not owned.

Modified: search/trunk/src/java/org/hibernate/search/backend/impl/lucene/PerDPQueueProcessor.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/impl/lucene/PerDPQueueProcessor.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/java/org/hibernate/search/backend/impl/lucene/PerDPQueueProcessor.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -103,6 +103,7 @@
 			for (LuceneWork lw : workOnWriter) {
 				lw.getWorkDelegate( worker ).performWork( lw, indexWriter );
 			}
+			workspace.commitIndexWriter();
 			//TODO next line is assuming the OptimizerStrategy will need an IndexWriter;
 			// would be nicer to have the strategy put an OptimizeWork on the queue,
 			// or just return "yes please" (true) to some method?

Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -583,11 +583,11 @@
 			case NO:
 				return Field.Index.NO;
 			case NO_NORMS:
-				return Field.Index.NO_NORMS;
+				return Field.Index.NOT_ANALYZED_NO_NORMS;
 			case TOKENIZED:
-				return Field.Index.TOKENIZED;
+				return Field.Index.ANALYZED;
 			case UN_TOKENIZED:
-				return Field.Index.UN_TOKENIZED;
+				return Field.Index.NOT_ANALYZED;
 			default:
 				throw new AssertionFailure( "Unexpected Index: " + index );
 		}
@@ -750,10 +750,10 @@
 		}
 		{
 			Field classField =
-					new Field( CLASS_FIELDNAME, entityType.getName(), Field.Store.YES, Field.Index.UN_TOKENIZED, Field.TermVector.NO );
+					new Field( CLASS_FIELDNAME, entityType.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO );
 			doc.add( classField );
 			LuceneOptions luceneOptions = new LuceneOptionsImpl( Field.Store.YES,
-					Field.Index.UN_TOKENIZED, Field.TermVector.NO, idBoost );
+					Field.Index.NOT_ANALYZED, Field.TermVector.NO, idBoost );
 			idBridge.set( idKeywordName, id, doc, luceneOptions );
 		}
 		buildDocumentFields( instance, doc, rootPropertiesMetadata );

Modified: search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -77,7 +77,8 @@
 		FSDirectory fsDirectory = FSDirectory.getDirectory( indexDir );
 		if ( ! IndexReader.indexExists( fsDirectory ) ) {
 			log.debug( "Initialize index: '{}'", indexDir.getAbsolutePath() );
-			IndexWriter iw = new IndexWriter( fsDirectory, new StandardAnalyzer(), true );
+			IndexWriter.MaxFieldLength fieldLength = new IndexWriter.MaxFieldLength( IndexWriter.DEFAULT_MAX_FIELD_LENGTH );
+			IndexWriter iw = new IndexWriter( fsDirectory, new StandardAnalyzer(), true, fieldLength );
 			iw.close();
 		}
 		return fsDirectory;

Modified: search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -28,7 +28,8 @@
 	public void start() {
 		directory = new RAMDirectory();
 		try {
-			IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), true );
+			IndexWriter.MaxFieldLength fieldLength = new IndexWriter.MaxFieldLength( IndexWriter.DEFAULT_MAX_FIELD_LENGTH );
+			IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), true, fieldLength );
 			iw.close();
 		}
 		catch (IOException e) {

Modified: search/trunk/src/test/org/hibernate/search/test/analyzer/AbstractTestAnalyzer.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/analyzer/AbstractTestAnalyzer.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/test/org/hibernate/search/test/analyzer/AbstractTestAnalyzer.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -23,12 +23,17 @@
 	private class InternalTokenStream extends TokenStream {
 		private int position;
 
-		public Token next() throws IOException {
-			if ( position >= getTokens().length) {
+		public Token next(final Token reusableToken) throws IOException {
+			assert reusableToken != null;
+			if ( position >= getTokens().length ) {
 				return null;
 			}
 			else {
-				return new Token( getTokens()[position++], 0, 0 );
+				reusableToken.clear();
+				reusableToken.setTermBuffer( getTokens()[position++] );
+				reusableToken.setStartOffset( 0 );
+				reusableToken.setEndOffset( 0 );
+				return reusableToken;
 			}
 		}
 	}

Modified: search/trunk/src/test/org/hibernate/search/test/filter/BestDriversFilter.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/filter/BestDriversFilter.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/test/org/hibernate/search/test/filter/BestDriversFilter.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -1,22 +1,23 @@
 //$Id$
 package org.hibernate.search.test.filter;
 
-import java.util.BitSet;
 import java.io.IOException;
 
-import org.apache.lucene.search.Filter;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermDocs;
-import org.apache.lucene.index.Term;
+import org.apache.lucene.search.DocIdSet;
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.util.OpenBitSet;
 
 /**
  * @author Emmanuel Bernard
  */
 public class BestDriversFilter extends Filter {
 
-	public BitSet bits(IndexReader reader) throws IOException {
-		BitSet bitSet = new BitSet( reader.maxDoc() );
-		TermDocs termDocs = reader.termDocs( new Term("score", "5") );
+	public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
+		OpenBitSet bitSet = new OpenBitSet( reader.maxDoc() );
+		TermDocs termDocs = reader.termDocs( new Term( "score", "5" ) );
 		while ( termDocs.next() ) {
 			bitSet.set( termDocs.doc() );
 		}

Modified: search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilter.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilter.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilter.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -7,6 +7,7 @@
 import org.apache.lucene.search.DocIdSet;
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.index.IndexReader;
+
 import org.hibernate.search.filter.EmptyDocIdBitSet;
 
 /**
@@ -14,13 +15,15 @@
  */
 @SuppressWarnings("serial")
 public class ExcludeAllFilter extends Filter {
-	
-	//ugly but useful for test purposes
+
+	// ugly but useful for test purposes
 	private static volatile boolean done = false;
 
 	@Override
 	public BitSet bits(IndexReader reader) throws IOException {
-		if ( done ) throw new IllegalStateException( "Called twice" );
+		if ( done ) {
+			throw new IllegalStateException( "Called twice" );
+		}
 		BitSet bitSet = new BitSet( reader.maxDoc() );
 		done = true;
 		return bitSet;
@@ -28,9 +31,10 @@
 
 	@Override
 	public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
-		if ( done ) throw new IllegalStateException( "Called twice" );
+		if ( done ) {
+			throw new IllegalStateException( "Called twice" );
+		}
 		done = true;
 		return EmptyDocIdBitSet.instance;
 	}
-	
 }

Modified: search/trunk/src/test/org/hibernate/search/test/filter/InstanceBasedExcludeAllFilter.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/filter/InstanceBasedExcludeAllFilter.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/test/org/hibernate/search/test/filter/InstanceBasedExcludeAllFilter.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -5,17 +5,32 @@
 
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.DocIdSet;
 
+import org.hibernate.search.filter.EmptyDocIdBitSet;
+
 /**
  * @author Emmanuel Bernard
  */
 public class InstanceBasedExcludeAllFilter extends Filter {
 	private volatile boolean done = false;
 
+	@Override
 	public BitSet bits(IndexReader reader) throws IOException {
-		if (done) throw new IllegalStateException("Called twice");
+		if ( done ) {
+			throw new IllegalStateException( "Called twice" );
+		}
 		BitSet bitSet = new BitSet( reader.maxDoc() );
 		done = true;
 		return bitSet;
 	}
+
+	@Override
+	public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
+		if ( done ) {
+			throw new IllegalStateException( "Called twice" );
+		}
+		done = true;
+		return EmptyDocIdBitSet.instance;
+	}
 }

Modified: search/trunk/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -54,11 +54,11 @@
 		s.close();
 		//create the work queue to send
 		Document doc = new Document();
-		Field field = new Field( DocumentBuilder.CLASS_FIELDNAME, ts.getClass().getName(), Field.Store.YES, Field.Index.UN_TOKENIZED );
+		Field field = new Field( DocumentBuilder.CLASS_FIELDNAME, ts.getClass().getName(), Field.Store.YES, Field.Index.NOT_ANALYZED );
 		doc.add( field );
-		field = new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED );
+		field = new Field("id", "1", Field.Store.YES, Field.Index.NOT_ANALYZED );
 		doc.add( field );
-		field = new Field("logo", ts.getLogo(), Field.Store.NO, Field.Index.TOKENIZED );
+		field = new Field("logo", ts.getLogo(), Field.Store.NO, Field.Index.ANALYZED );
 		doc.add( field );
 		LuceneWork luceneWork = new AddLuceneWork(ts.getId(), String.valueOf( ts.getId() ), ts.getClass(), doc );
 		List<LuceneWork> queue = new ArrayList<LuceneWork>();

Modified: search/trunk/src/test/org/hibernate/search/test/reader/performance/IndexFillRunnable.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/reader/performance/IndexFillRunnable.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/test/org/hibernate/search/test/reader/performance/IndexFillRunnable.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -16,23 +16,29 @@
 
 	private volatile int jobSeed = 0;
 	private final IndexWriter iw;
-	
+
 	public IndexFillRunnable(IndexWriter iw) {
 		super();
 		this.iw = iw;
 	}
 
 	public void run() {
-		Field f1 = new Field("name", "Some One " + jobSeed++, Store.NO, Index.TOKENIZED );
-		Field f2 = new Field("physicalDescription", " just more people sitting around and filling my index... ", Store.NO, Index.TOKENIZED );
+		Field f1 = new Field( "name", "Some One " + jobSeed++, Store.NO, Index.ANALYZED );
+		Field f2 = new Field(
+				"physicalDescription",
+				" just more people sitting around and filling my index... ",
+				Store.NO,
+				Index.ANALYZED
+		);
 		Document d = new Document();
 		d.add( f1 );
 		d.add( f2 );
 		try {
 			iw.addDocument( d );
-		} catch (IOException e) {
+		}
+		catch ( IOException e ) {
 			e.printStackTrace();
 		}
 	}
-	
+
 }

Modified: search/trunk/src/test/org/hibernate/search/test/reader/performance/ReaderPerformance.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/reader/performance/ReaderPerformance.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/test/org/hibernate/search/test/reader/performance/ReaderPerformance.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -55,7 +55,8 @@
 	private void buildBigIndex() throws InterruptedException, CorruptIndexException, LockObtainFailedException, IOException {
 		System.out.println( "Going to create fake index..." );
 		FSDirectory directory = FSDirectory.getDirectory(new File(getBaseIndexDir(), Detective.class.getCanonicalName()));
-		IndexWriter iw = new IndexWriter( directory, new SimpleAnalyzer(), true );
+		IndexWriter.MaxFieldLength fieldLength = new IndexWriter.MaxFieldLength( IndexWriter.DEFAULT_MAX_FIELD_LENGTH );
+		IndexWriter iw = new IndexWriter( directory, new SimpleAnalyzer(), true, fieldLength );
 		IndexFillRunnable filler = new IndexFillRunnable( iw );
 		ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool( WORKER_THREADS );
 		for (int batch=0; batch<=5000000; batch++){
@@ -63,6 +64,7 @@
 		}
 		executor.shutdown();
 		executor.awaitTermination( 600, TimeUnit.SECONDS );
+		iw.commit();
 		iw.optimize();
 		iw.close();
 		System.out.println( "Index created." );

Modified: search/trunk/src/test/org/hibernate/search/test/util/AnalyzerUtils.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/util/AnalyzerUtils.java	2008-11-11 10:14:22 UTC (rev 15546)
+++ search/trunk/src/test/org/hibernate/search/test/util/AnalyzerUtils.java	2008-11-11 12:57:47 UTC (rev 15547)
@@ -26,23 +26,24 @@
 	public static Token[] tokensFromAnalysis(Analyzer analyzer, String field, String text) throws IOException {
 		TokenStream stream = analyzer.tokenStream( field, new StringReader( text ) );
 		List<Token> tokenList = new ArrayList<Token>();
+		Token reusableToken = new Token();
 		while ( true ) {
-			Token token = stream.next();
+
+			Token token = stream.next( reusableToken );
 			if ( token == null ) {
 				break;
 			}
 
-			tokenList.add( token );
+			tokenList.add( ( Token ) token.clone() );
 		}
 
-		return ( Token[] ) tokenList.toArray( new Token[0] );
+		return tokenList.toArray( new Token[tokenList.size()] );
 	}
 
 	public static void displayTokens(Analyzer analyzer, String field, String text) throws IOException {
 		Token[] tokens = tokensFromAnalysis( analyzer, field, text );
 
-		for ( int i = 0; i < tokens.length; i++ ) {
-			Token token = tokens[i];
+		for ( Token token : tokens ) {
 			log.debug( "[" + getTermText( token ) + "] " );
 		}
 	}
@@ -52,9 +53,7 @@
 
 		int position = 0;
 
-		for ( int i = 0; i < tokens.length; i++ ) {
-			Token token = tokens[i];
-
+		for ( Token token : tokens ) {
 			int increment = token.getPositionIncrement();
 
 			if ( increment > 0 ) {
@@ -72,9 +71,7 @@
 		StringBuilder builder = new StringBuilder();
 		int position = 0;
 
-		for ( int i = 0; i < tokens.length; i++ ) {
-			Token token = tokens[i];
-
+		for ( Token token : tokens ) {
 			int increment = token.getPositionIncrement();
 
 			if ( increment > 0 ) {




More information about the hibernate-commits mailing list