[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