[hibernate-commits] Hibernate SVN: r15000 - in search/trunk/src: java/org/hibernate/search/engine and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Jul 31 11:39:33 EDT 2008


Author: hardy.ferentschik
Date: 2008-07-31 11:39:33 -0400 (Thu, 31 Jul 2008)
New Revision: 15000

Modified:
   search/trunk/src/java/org/hibernate/search/SearchFactory.java
   search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
   search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
   search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java
   search/trunk/src/test/org/hibernate/search/test/analyzer/AnalyzerTest.java
Log:
HSEARCH-244:
* Exposed the ScopedAnalyer in SearchFactory

Modified: search/trunk/src/java/org/hibernate/search/SearchFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/SearchFactory.java	2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/java/org/hibernate/search/SearchFactory.java	2008-07-31 15:39:33 UTC (rev 15000)
@@ -4,6 +4,7 @@
 import org.apache.lucene.analysis.Analyzer;
 import org.hibernate.search.reader.ReaderProvider;
 import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.util.ScopedAnalyzer;
 
 /**
  * Provide application wide operations as well as access to the underlying Lucene resources.
@@ -42,4 +43,14 @@
 	 * @throws SearchException if the definition name is unknown
 	 */
 	Analyzer getAnalyzer(String name);
+	
+	/**
+	 * Retrieves the scoped analyzer for a given class.
+	 * 
+	 * @param clazz The class for which to retrieve the analyzer.
+	 * @return The scoped analyzer for the specified class.
+	 * @throws IllegalArgumentException in case <code>clazz == null</code> or the specified
+	 * class is not an indexed entity.
+	 */
+	ScopedAnalyzer getAnalyzer(Class clazz);
 }

Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java	2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java	2008-07-31 15:39:33 UTC (rev 15000)
@@ -705,7 +705,7 @@
 		return shardingStrategy;
 	}
 
-	public Analyzer getAnalyzer() {
+	public ScopedAnalyzer getAnalyzer() {
 		return analyzer;
 	}
 

Modified: search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java	2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java	2008-07-31 15:39:33 UTC (rev 15000)
@@ -25,7 +25,6 @@
 import org.hibernate.search.Environment;
 import org.hibernate.search.SearchException;
 import org.hibernate.search.Version;
-import org.hibernate.search.cfg.SearchConfiguration;
 import org.hibernate.search.annotations.Factory;
 import org.hibernate.search.annotations.FullTextFilterDef;
 import org.hibernate.search.annotations.FullTextFilterDefs;
@@ -38,6 +37,7 @@
 import org.hibernate.search.backend.Worker;
 import org.hibernate.search.backend.WorkerFactory;
 import org.hibernate.search.backend.configuration.ConfigurationParseHelper;
+import org.hibernate.search.cfg.SearchConfiguration;
 import org.hibernate.search.engine.DocumentBuilder;
 import org.hibernate.search.engine.FilterDef;
 import org.hibernate.search.engine.SearchFactoryImplementor;
@@ -49,6 +49,7 @@
 import org.hibernate.search.store.DirectoryProvider;
 import org.hibernate.search.store.DirectoryProviderFactory;
 import org.hibernate.search.store.optimization.OptimizerStrategy;
+import org.hibernate.search.util.ScopedAnalyzer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -306,6 +307,19 @@
 		if ( analyzer == null) throw new SearchException( "Unknown Analyzer definition: " + name);
 		return analyzer;
 	}
+	
+	public ScopedAnalyzer getAnalyzer(Class clazz) {
+		if ( clazz ==  null) {
+			throw new IllegalArgumentException( "A class has to be specified for retrieving a scoped analyzer" );
+		}
+		
+		DocumentBuilder<Object> builder = documentBuilders.get( clazz );
+		if ( builder == null ) {
+			throw new IllegalArgumentException( "Entity for which to retrieve the scoped analyzer is not an @Indexed entity: " + clazz.getName() );
+		}
+		
+		return builder.getAnalyzer();
+	}	
 
 	private void initDocumentBuilders(SearchConfiguration cfg, ReflectionManager reflectionManager) {
 		InitContext context = new InitContext( cfg );

Modified: search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java	2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java	2008-07-31 15:39:33 UTC (rev 15000)
@@ -2,8 +2,9 @@
 package org.hibernate.search.util;
 
 import java.io.Reader;
+import java.util.HashMap;
 import java.util.Map;
-import java.util.HashMap;
+import java.util.Set;
 
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.TokenStream;
@@ -20,6 +21,10 @@
 	public void setGlobalAnalyzer(Analyzer globalAnalyzer) {
 		this.globalAnalyzer = globalAnalyzer;
 	}
+	
+	public Analyzer getGlobalAnalyzer() {
+		return globalAnalyzer;
+	}	
 
 	public void addScopedAnalyzer(String scope, Analyzer scopedAnalyzer) {
 		scopedAnalyzers.put( scope, scopedAnalyzer );
@@ -33,11 +38,15 @@
 		return getAnalyzer( fieldName ).getPositionIncrementGap( fieldName );
 	}
 
-	private Analyzer getAnalyzer(String fieldName) {
+	public Analyzer getAnalyzer(String fieldName) {
 		Analyzer analyzer = scopedAnalyzers.get( fieldName );
 		if (analyzer == null) {
 			analyzer = globalAnalyzer;
 		}
 		return analyzer;
 	}
+	
+	public Set<String> getFields() {
+		return scopedAnalyzers.keySet();
+	}
 }

Modified: search/trunk/src/test/org/hibernate/search/test/analyzer/AnalyzerTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/analyzer/AnalyzerTest.java	2008-07-31 15:10:43 UTC (rev 14999)
+++ search/trunk/src/test/org/hibernate/search/test/analyzer/AnalyzerTest.java	2008-07-31 15:39:33 UTC (rev 15000)
@@ -1,19 +1,28 @@
 // $Id$
 package org.hibernate.search.test.analyzer;
 
-import org.hibernate.search.test.SearchTestCase;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.queryParser.QueryParser;
+import org.hibernate.Transaction;
+import org.hibernate.search.FullTextQuery;
 import org.hibernate.search.FullTextSession;
 import org.hibernate.search.Search;
-import org.hibernate.search.FullTextQuery;
-import org.hibernate.Transaction;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.util.ScopedAnalyzer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author Emmanuel Bernard
  */
 public class AnalyzerTest extends SearchTestCase {
 
+	public static final Logger log = LoggerFactory.getLogger( AnalyzerTest.class );
+
 	public void testScopedAnalyzers() throws Exception {
 		MyEntity en = new MyEntity();
 		en.setEntity( "Entity" );
@@ -27,20 +36,20 @@
 		tx.commit();
 
 		tx = s.beginTransaction();
-		QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
-		org.apache.lucene.search.Query luceneQuery = parser.parse( "entity:alarm");
+		QueryParser parser = new QueryParser( "id", new StandardAnalyzer() );
+		org.apache.lucene.search.Query luceneQuery = parser.parse( "entity:alarm" );
 		FullTextQuery query = s.createFullTextQuery( luceneQuery, MyEntity.class );
 		assertEquals( 1, query.getResultSize() );
 
-		luceneQuery = parser.parse( "property:cat");
+		luceneQuery = parser.parse( "property:cat" );
 		query = s.createFullTextQuery( luceneQuery, MyEntity.class );
 		assertEquals( 1, query.getResultSize() );
 
-		luceneQuery = parser.parse( "field:energy");
+		luceneQuery = parser.parse( "field:energy" );
 		query = s.createFullTextQuery( luceneQuery, MyEntity.class );
 		assertEquals( 1, query.getResultSize() );
 
-		luceneQuery = parser.parse( "component.componentProperty:noise");
+		luceneQuery = parser.parse( "component.componentProperty:noise" );
 		query = s.createFullTextQuery( luceneQuery, MyEntity.class );
 		assertEquals( 1, query.getResultSize() );
 
@@ -48,12 +57,51 @@
 		tx.commit();
 
 		s.close();
+	}
 
+	public void testScopedAnalyzersAPI() throws Exception {
+		FullTextSession session = Search.getFullTextSession( openSession() );
+		SearchFactory searchFactory = session.getSearchFactory();
+		ScopedAnalyzer analzyer = searchFactory.getAnalyzer( MyEntity.class );
+
+		// explicitly get the global analyzer
+		assertEquals( "Wrong analyzer", Test1Analyzer.class, analzyer.getGlobalAnalyzer().getClass() );
+
+		// get the global analyzer by specifying a non existing field or null
+		assertEquals( "Wrong analyzer", Test1Analyzer.class, analzyer.getAnalyzer("").getClass() );
+		assertEquals( "Wrong analyzer", Test1Analyzer.class, analzyer.getAnalyzer(null).getClass() );
+		
+		// get a field analyzer
+		assertEquals( "Wrong analyzer", Test1Analyzer.class, analzyer.getAnalyzer("entity").getClass() );
+		assertEquals( "Wrong analyzer", Test2Analyzer.class, analzyer.getAnalyzer("property").getClass() );
+		assertEquals( "Wrong analyzer", Test3Analyzer.class, analzyer.getAnalyzer("field").getClass() );
+		assertEquals( "Wrong analyzer", Test4Analyzer.class, analzyer.getAnalyzer("component.componentProperty").getClass() );
+		
+		// get the field set
+		Set<String> fields = new HashSet<String>();
+		fields.add( "entity" );
+		fields.add( "property" );
+		fields.add( "field" );
+		fields.add( "component.componentProperty" );
+		assertEquals( "Wrong field set", fields, analzyer.getFields());
+		
+		// test border cases
+		try {
+			searchFactory.getAnalyzer( (Class) null );
+		} catch (IllegalArgumentException iae) {
+			log.debug( "success" );
+		}
+		
+		try {
+			searchFactory.getAnalyzer( String.class );
+		} catch (IllegalArgumentException iae) {
+			log.debug( "success" );
+		}		
+		
+		session.close();
 	}
 
 	protected Class[] getMappings() {
-		return new Class[] {
-				MyEntity.class
-		};
+		return new Class[] { MyEntity.class };
 	}
 }




More information about the hibernate-commits mailing list