[hibernate-commits] Hibernate SVN: r15019 - in search/trunk/src: java/org/hibernate/search/engine and 4 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Wed Aug 6 06:44:02 EDT 2008
Author: hardy.ferentschik
Date: 2008-08-06 06:44:01 -0400 (Wed, 06 Aug 2008)
New Revision: 15019
Added:
search/trunk/src/test/org/hibernate/search/test/util/AnalyzerUtils.java
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:
now ScopedAnalyzer is not explicitly exposed anymore from SearchFactory.
Modified: search/trunk/src/java/org/hibernate/search/SearchFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/SearchFactory.java 2008-08-05 23:47:13 UTC (rev 15018)
+++ search/trunk/src/java/org/hibernate/search/SearchFactory.java 2008-08-06 10:44:01 UTC (rev 15019)
@@ -4,7 +4,6 @@
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.
@@ -52,5 +51,5 @@
* @throws IllegalArgumentException in case <code>clazz == null</code> or the specified
* class is not an indexed entity.
*/
- ScopedAnalyzer getAnalyzer(Class clazz);
+ Analyzer 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-08-05 23:47:13 UTC (rev 15018)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2008-08-06 10:44:01 UTC (rev 15019)
@@ -705,7 +705,7 @@
return shardingStrategy;
}
- public ScopedAnalyzer getAnalyzer() {
+ public Analyzer 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-08-05 23:47:13 UTC (rev 15018)
+++ search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java 2008-08-06 10:44:01 UTC (rev 15019)
@@ -308,7 +308,7 @@
return analyzer;
}
- public ScopedAnalyzer getAnalyzer(Class clazz) {
+ public Analyzer getAnalyzer(Class clazz) {
if ( clazz == null) {
throw new IllegalArgumentException( "A class has to be specified for retrieving a scoped analyzer" );
}
Modified: search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java 2008-08-05 23:47:13 UTC (rev 15018)
+++ search/trunk/src/java/org/hibernate/search/util/ScopedAnalyzer.java 2008-08-06 10:44:01 UTC (rev 15019)
@@ -4,49 +4,45 @@
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;
-import java.util.Set;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
/**
+ * A <code>ScopedAnalyzer</code> is a wrapper class containing all analyzers for a given class.
+ * <code>ScopedAnalyzer</code> behaves similar to <code>PerFieldAnalyzerWrapper</code> by delegating requests for
+ * <code>TokenStream</code>s to the underlying <code>Analyzer</code> depending on the requested the field name.
+ *
* @author Emmanuel Bernard
*/
public class ScopedAnalyzer extends Analyzer {
- public ScopedAnalyzer() {}
+ public ScopedAnalyzer() {
+ }
private Analyzer globalAnalyzer;
private Map<String, Analyzer> scopedAnalyzers = new HashMap<String, Analyzer>();
- public void setGlobalAnalyzer(Analyzer globalAnalyzer) {
+ public void setGlobalAnalyzer( Analyzer globalAnalyzer ) {
this.globalAnalyzer = globalAnalyzer;
}
-
- public Analyzer getGlobalAnalyzer() {
- return globalAnalyzer;
- }
- public void addScopedAnalyzer(String scope, Analyzer scopedAnalyzer) {
- scopedAnalyzers.put( scope, scopedAnalyzer );
+ public void addScopedAnalyzer( String scope, Analyzer scopedAnalyzer ) {
+ scopedAnalyzers.put(scope, scopedAnalyzer);
}
- public TokenStream tokenStream(String fieldName, Reader reader) {
- return getAnalyzer( fieldName ).tokenStream( fieldName, reader );
+ public TokenStream tokenStream( String fieldName, Reader reader ) {
+ return getAnalyzer(fieldName).tokenStream(fieldName, reader);
}
- public int getPositionIncrementGap(String fieldName) {
- return getAnalyzer( fieldName ).getPositionIncrementGap( fieldName );
+ public int getPositionIncrementGap( String fieldName ) {
+ return getAnalyzer(fieldName).getPositionIncrementGap(fieldName);
}
- public Analyzer getAnalyzer(String fieldName) {
- Analyzer analyzer = scopedAnalyzers.get( fieldName );
- if (analyzer == null) {
+ private 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-08-05 23:47:13 UTC (rev 15018)
+++ search/trunk/src/test/org/hibernate/search/test/analyzer/AnalyzerTest.java 2008-08-06 10:44:01 UTC (rev 15019)
@@ -1,9 +1,8 @@
// $Id$
package org.hibernate.search.test.analyzer;
-import java.util.HashSet;
-import java.util.Set;
-
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.QueryParser;
import org.hibernate.Transaction;
@@ -12,7 +11,7 @@
import org.hibernate.search.Search;
import org.hibernate.search.SearchFactory;
import org.hibernate.search.test.SearchTestCase;
-import org.hibernate.search.util.ScopedAnalyzer;
+import org.hibernate.search.test.util.AnalyzerUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,83 +20,77 @@
*/
public class AnalyzerTest extends SearchTestCase {
- public static final Logger log = LoggerFactory.getLogger( AnalyzerTest.class );
+ public static final Logger log = LoggerFactory.getLogger(AnalyzerTest.class);
public void testScopedAnalyzers() throws Exception {
MyEntity en = new MyEntity();
- en.setEntity( "Entity" );
- en.setField( "Field" );
- en.setProperty( "Property" );
- en.setComponent( new MyComponent() );
- en.getComponent().setComponentProperty( "component property" );
- FullTextSession s = Search.getFullTextSession( openSession() );
+ en.setEntity("Entity");
+ en.setField("Field");
+ en.setProperty("Property");
+ en.setComponent(new MyComponent());
+ en.getComponent().setComponentProperty("component property");
+ FullTextSession s = Search.getFullTextSession(openSession());
Transaction tx = s.beginTransaction();
- s.persist( en );
+ s.persist(en);
tx.commit();
tx = s.beginTransaction();
- 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() );
+ 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" );
- query = s.createFullTextQuery( luceneQuery, MyEntity.class );
- assertEquals( 1, query.getResultSize() );
+ luceneQuery = parser.parse("property:cat");
+ query = s.createFullTextQuery(luceneQuery, MyEntity.class);
+ assertEquals(1, query.getResultSize());
- luceneQuery = parser.parse( "field:energy" );
- query = s.createFullTextQuery( luceneQuery, MyEntity.class );
- assertEquals( 1, query.getResultSize() );
+ luceneQuery = parser.parse("field:energy");
+ query = s.createFullTextQuery(luceneQuery, MyEntity.class);
+ assertEquals(1, query.getResultSize());
- luceneQuery = parser.parse( "component.componentProperty:noise" );
- query = s.createFullTextQuery( luceneQuery, MyEntity.class );
- assertEquals( 1, query.getResultSize() );
+ luceneQuery = parser.parse("component.componentProperty:noise");
+ query = s.createFullTextQuery(luceneQuery, MyEntity.class);
+ assertEquals(1, query.getResultSize());
- s.delete( query.uniqueResult() );
+ s.delete(query.uniqueResult());
tx.commit();
s.close();
}
- public void testScopedAnalyzersAPI() throws Exception {
- FullTextSession session = Search.getFullTextSession( openSession() );
+ public void testScopedAnalyzersFromSearchFactory() throws Exception {
+ FullTextSession session = Search.getFullTextSession(openSession());
SearchFactory searchFactory = session.getSearchFactory();
- ScopedAnalyzer analzyer = searchFactory.getAnalyzer( MyEntity.class );
+ Analyzer analyzer = searchFactory.getAnalyzer(MyEntity.class);
- // explicitly get the global analyzer
- assertEquals( "Wrong analyzer", Test1Analyzer.class, analzyer.getGlobalAnalyzer().getClass() );
+ // you can pass what so ever into the analysis since the used analyzers are
+ // returning the same tokens all the time. We just want to make sure that
+ // the right analyzers are used.
+ Token[] tokens = AnalyzerUtils.tokensFromAnalysis(analyzer, "entity", "");
+ AnalyzerUtils.assertTokensEqual(tokens, new String[] { "alarm", "dog", "performance" });
- // 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());
-
+ tokens = AnalyzerUtils.tokensFromAnalysis(analyzer, "property", "");
+ AnalyzerUtils.assertTokensEqual(tokens, new String[] { "sound", "cat", "speed" });
+
+ tokens = AnalyzerUtils.tokensFromAnalysis(analyzer, "field", "");
+ AnalyzerUtils.assertTokensEqual(tokens, new String[] { "music", "elephant", "energy" });
+
+ tokens = AnalyzerUtils.tokensFromAnalysis(analyzer, "component.componentProperty", "");
+ AnalyzerUtils.assertTokensEqual(tokens, new String[] { "noise", "mouse", "light" });
+
// test border cases
try {
- searchFactory.getAnalyzer( (Class) null );
- } catch (IllegalArgumentException iae) {
- log.debug( "success" );
+ searchFactory.getAnalyzer((Class) null);
+ } catch ( IllegalArgumentException iae ) {
+ log.debug("success");
}
-
+
try {
- searchFactory.getAnalyzer( String.class );
- } catch (IllegalArgumentException iae) {
- log.debug( "success" );
- }
-
+ searchFactory.getAnalyzer(String.class);
+ } catch ( IllegalArgumentException iae ) {
+ log.debug("success");
+ }
+
session.close();
}
Added: search/trunk/src/test/org/hibernate/search/test/util/AnalyzerUtils.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/util/AnalyzerUtils.java (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/util/AnalyzerUtils.java 2008-08-06 10:44:01 UTC (rev 15019)
@@ -0,0 +1,101 @@
+// $Id:$
+package org.hibernate.search.test.util;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.Token;
+import org.apache.lucene.analysis.TokenStream;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Helper class to test analyzers. Taken and modified from <i>Lucene in Action</i>.
+ *
+ * @author Hardy Ferentschik
+ */
+public class AnalyzerUtils {
+
+ public static final Logger log = LoggerFactory.getLogger(AnalyzerUtils.class);
+
+ 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>();
+ while ( true ) {
+ Token token = stream.next();
+ if ( token == null )
+ break;
+
+ tokenList.add(token);
+ }
+
+ return (Token[]) tokenList.toArray(new Token[0]);
+ }
+
+ 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];
+ log.debug("[" + getTermText(token) + "] ");
+ }
+ }
+
+ public static void displayTokensWithPositions(Analyzer analyzer, String field, String text) throws IOException {
+ Token[] tokens = tokensFromAnalysis(analyzer, field, text);
+
+ int position = 0;
+
+ for ( int i = 0; i < tokens.length; i++ ) {
+ Token token = tokens[i];
+
+ int increment = token.getPositionIncrement();
+
+ if ( increment > 0 ) {
+ position = position + increment;
+ System.out.println();
+ System.out.print(position + ": ");
+ }
+
+ log.debug("[" + getTermText(token) + "] ");
+ }
+ }
+
+ public static void displayTokensWithFullDetails(Analyzer analyzer, String field, String text) throws IOException {
+ Token[] tokens = tokensFromAnalysis(analyzer, field, text);
+ StringBuilder builder = new StringBuilder();
+ int position = 0;
+
+ for ( int i = 0; i < tokens.length; i++ ) {
+ Token token = tokens[i];
+
+ int increment = token.getPositionIncrement();
+
+ if ( increment > 0 ) {
+ position = position + increment;
+ builder.append("\n").append(position).append(": ");
+ }
+
+ builder.append("[").append(getTermText(token)).append(":").append(token.startOffset()).append("->").append(
+ token.endOffset()).append(":").append(token.type()).append("] ");
+ log.debug(builder.toString());
+ }
+ }
+
+ public static void assertTokensEqual(Token[] tokens, String[] strings) {
+ Assert.assertEquals(strings.length, tokens.length);
+
+ for ( int i = 0; i < tokens.length; i++ ) {
+ Assert.assertEquals("index " + i, strings[i], getTermText(tokens[i]));
+ }
+ }
+
+ public static String getTermText(Token token) {
+ return new String(token.termBuffer(), 0, token.termLength());
+ }
+}
Property changes on: search/trunk/src/test/org/hibernate/search/test/util/AnalyzerUtils.java
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
More information about the hibernate-commits
mailing list