Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

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

hibernate-commits

2008-08-06


Author LoginPost Reply
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)
@@(protected) @@
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.
@@(protected) @@
  * @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)
@@(protected) @@
   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)
@@(protected) @@
   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)
@@(protected) @@
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)
@@(protected) @@
// $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;
@@(protected) @@
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;

@@(protected) @@
*/
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)
@@(protected) @@
+// $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

_______________________________________________
hibernate-commits mailing list
hibernate-commits@(protected)
https://lists.jboss.org/mailman/listinfo/hibernate-commits
©2008 gg3721.com - Jax Systems, LLC, U.S.A.