[jboss-cvs] jboss-seam/examples/blog/src/actions ...

Emmanuel Bernard emmanuel.bernard at jboss.com
Tue Jun 26 21:56:45 EDT 2007


  User: ebernard
  Date: 07/06/26 21:56:45

  Modified:    examples/blog/src/actions   SearchService.java
  Added:       examples/blog/src/actions   IndexerService.java
  Log:
  Use Hibernate Search in the blog example
  
  Revision  Changes    Path
  1.6       +31 -8     jboss-seam/examples/blog/src/actions/SearchService.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: SearchService.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/blog/src/actions/SearchService.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -b -r1.5 -r1.6
  --- SearchService.java	26 Feb 2007 20:31:11 -0000	1.5
  +++ SearchService.java	27 Jun 2007 01:56:45 -0000	1.6
  @@ -1,12 +1,21 @@
   package actions;
   
   import java.util.List;
  +import java.util.HashMap;
  +import java.util.Map;
   
   import javax.persistence.EntityManager;
   
   import org.jboss.seam.annotations.Factory;
   import org.jboss.seam.annotations.In;
   import org.jboss.seam.annotations.Name;
  +import org.hibernate.search.FullTextSession;
  +import org.hibernate.search.Search;
  +import org.hibernate.Session;
  +import org.apache.lucene.analysis.standard.StandardAnalyzer;
  +import org.apache.lucene.queryParser.QueryParser;
  +import org.apache.lucene.queryParser.MultiFieldQueryParser;
  +import org.apache.lucene.queryParser.ParseException;
   
   import domain.BlogEntry;
   
  @@ -31,18 +40,32 @@
         {
            return null;
         }
  +      else if ("".equals(searchPattern) ) {
  +         searchPattern = null;
  +         return entityManager.createQuery("select be from BlogEntry be order by date desc").getResultList();
  +      }
         else
         {
  -         return entityManager.createQuery("select be from BlogEntry be where lower(be.title) like :searchPattern or lower(be.body) like :searchPattern order by be.date desc")
  -               .setParameter( "searchPattern", getSqlSearchPattern() )
  -               .setMaxResults(100)
  -               .getResultList();
  -      }
  +         Map<String,Float> boostPerField = new HashMap<String,Float>();
  +         boostPerField.put( "title", 4f );
  +         boostPerField.put( "body", 1f );
  +         String[] productFields = {"title", "body"};
  +         QueryParser parser = new MultiFieldQueryParser(productFields, new StandardAnalyzer(), boostPerField);
  +         parser.setAllowLeadingWildcard(true);
  +         org.apache.lucene.search.Query luceneQuery;
  +         try
  +         {
  +            luceneQuery = parser.parse(searchPattern);
      }
  -
  -   private String getSqlSearchPattern()
  +         catch (ParseException e)
      {
  -      return searchPattern==null ? "" : '%' + searchPattern.toLowerCase().replace('*', '%').replace('?', '_') + '%';
  +            return null;
  +         }
  +         FullTextSession session = (FullTextSession) entityManager.getDelegate();
  +         return session.createFullTextQuery(luceneQuery, BlogEntry.class)
  +               .setMaxResults(100)
  +               .list();
  +      }
      }
   
      public String getSearchPattern()
  
  
  
  1.1      date: 2007/06/27 01:56:45;  author: ebernard;  state: Exp;jboss-seam/examples/blog/src/actions/IndexerService.java
  
  Index: IndexerService.java
  ===================================================================
  //$Id: IndexerService.java,v 1.1 2007/06/27 01:56:45 ebernard Exp $
  
  import java.util.List;
  import javax.ejb.Stateful;
  import javax.ejb.Remove;
  import javax.persistence.EntityManager;
  
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Startup;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.annotations.In;
  import org.jboss.seam.annotations.Destroy;
  import org.jboss.seam.annotations.Create;
  import org.jboss.seam.ScopeType;
  import org.hibernate.search.FullTextSession;
  import org.hibernate.search.Search;
  import org.hibernate.Session;
  
  /**
   * Index Blog entry at startup
   *
   * @author Emmanuel Bernard
   */
  @Name("indexerService")
  @Scope(ScopeType.APPLICATION)
  @Startup
  public class IndexerService
  {
     @In
     private EntityManager entityManager;
  
     @Create
     public void index() {
        List blogEntries = entityManager.createQuery("select be from BlogEntry be").getResultList();
        FullTextSession session = (FullTextSession) entityManager.getDelegate();
        for (Object be : blogEntries) {
           session.index(be);   
        }
     }
  
     @Remove
     @Destroy
     public void stop() {}
  }
  
  
  



More information about the jboss-cvs-commits mailing list