[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