[jbosscache-commits] JBoss Cache SVN: r5988 - searchable/trunk/src/main/java/org/jboss/cache/search.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Mon Jun 16 10:05:46 EDT 2008


Author: navssurtani
Date: 2008-06-16 10:05:46 -0400 (Mon, 16 Jun 2008)
New Revision: 5988

Added:
   searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java
   searchable/trunk/src/main/java/org/jboss/cache/search/CacheQueryImpl.java
Modified:
   searchable/trunk/src/main/java/org/jboss/cache/search/NodeModifiedTransactionContext.java
   searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCache.java
   searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheFactory.java
   searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheImpl.java
   searchable/trunk/src/main/java/org/jboss/cache/search/SearchableListener.java
   searchable/trunk/src/main/java/org/jboss/cache/search/Transformer.java
Log:
Renamed stuff

Copied: searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java (from rev 5947, searchable/trunk/src/main/java/org/jboss/cache/search/QueryResult.java)
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java	                        (rev 0)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java	2008-06-16 14:05:46 UTC (rev 5988)
@@ -0,0 +1,67 @@
+package org.jboss.cache.search;
+
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.Sort;
+import org.hibernate.search.FullTextFilter;
+/**
+ at author Navin Surtani  - navin at surtani.org
+ */
+public interface CacheQuery
+{
+   //TODO: Figure out where we got this interface from ... then get the methods from the impl of THAT impl and copy it into CacheQuery impl.
+   /**
+    * Allows to let lucene sort the results. This is useful when you have
+    * additional sort requirements on top of the default lucene ranking.
+    * Without lucene sorting you would have to retrieve the full result set and
+    * order the hibernate objects.
+    *
+    * @param sort The lucene sort object.
+    * @return this for method chaining
+    */
+   CacheQuery setSort(Sort sort);
+
+   /**
+    * Allows to use lucene filters.
+    * Semi-deprecated? a preferred way is to use the @FullTextFilterDef approach
+    *
+    * @param filter The lucene filter.
+    * @return this for method chaining
+    */
+   CacheQuery setFilter(Filter filter);
+
+   /**
+    * Returns the number of hits for this search
+    * <p/>
+    * Caution:
+    * The number of results might be slightly different from
+    * <code>list().size()</code> because list() if the index is
+    * not in sync with the database at the time of query.
+    */
+   int getResultSize();
+
+   /**
+    * Enable a given filter by its name. Returns a FullTextFilter object that allows filter parameter injection
+    */
+   FullTextFilter enableFullTextFilter(String name);
+
+   /**
+    * Disable a given filter by its name
+    */
+   void disableFullTextFilter(String name);
+
+   /**
+    * {link:Query#setFirstResult}
+    */
+   CacheQuery setFirstResult(int firstResult);
+
+   /**
+    * {link:Query#setMaxResults}
+    */
+   CacheQuery setMaxResults(int maxResults);
+
+   /**
+    * Defines scrollable result fetch size as well as the JDBC fetch size
+    */
+   CacheQuery setFetchSize(int i);
+
+} 

Copied: searchable/trunk/src/main/java/org/jboss/cache/search/CacheQueryImpl.java (from rev 5965, searchable/trunk/src/main/java/org/jboss/cache/search/QueryResultImpl.java)
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/CacheQueryImpl.java	                        (rev 0)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/CacheQueryImpl.java	2008-06-16 14:05:46 UTC (rev 5988)
@@ -0,0 +1,169 @@
+package org.jboss.cache.search;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Sort;
+import org.hibernate.HibernateException;
+import org.hibernate.search.FullTextFilter;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.engine.FilterDef;
+import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.impl.SearchFactoryImpl;
+import org.hibernate.search.query.FullTextFilterImpl;
+import org.hibernate.search.util.ContextHelper;
+import org.jboss.cache.Cache;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Navin Surtani  - navin at surtani.org
+ */
+public class CacheQueryImpl implements CacheQuery
+{
+   //TODO: Javadoc all these methods
+   private Query query;
+   private Cache cache;
+   private Class[] classes;
+   private Sort sort;
+   private Filter filter;
+   private Map<String, FullTextFilterImpl> filterDefinitions;
+   private SearchFactoryImplementor searchFactoryImplementor;
+   private Integer firstResult;
+   private Integer resultSize;
+   private Integer maxResults;
+   private static final Log log = LogFactory.getLog(CacheQueryImpl.class);
+
+   public CacheQueryImpl(Query luceneQuery, Cache cache)
+   {
+      this.query = luceneQuery;
+      this.cache = cache;
+   }
+
+   public CacheQueryImpl(Query luceneQuery, Cache cache, Class... classes)
+   {
+      this.query = luceneQuery;
+      this.cache = cache;
+      this.classes = classes;
+
+   }
+
+   public CacheQuery setSort(Sort sort)
+   {
+      this.sort = sort;
+      return this;
+   }
+
+   public CacheQuery setFilter(Filter filter)
+   {
+      this.filter = filter;
+      return this;
+   }
+
+   public int getResultSize()
+   {
+      if (resultSize == null)
+      {
+         //get result size without object initialization
+         SearchFactoryImplementor searchFactoryImplementor = ContextHelper.getSearchFactoryBySFI(session);
+         IndexSearcher searcher = buildSearcher(searchFactoryImplementor);
+         if (searcher == null)
+         {
+            resultSize = 0;
+         }
+         else
+         {
+            Hits hits;
+            try
+            {
+               hits = getHits(searcher);
+               resultSize = hits.length();
+            }
+            catch (IOException e)
+            {
+               throw new HibernateException("Unable to query Lucene index", e);
+            }
+            finally
+            {
+               //searcher cannot be null
+               try
+               {
+                  closeSearcher(searcher, searchFactoryImplementor.getReaderProvider());
+                  //searchFactoryImplementor.getReaderProvider().closeReader( searcher.getIndexReader() );
+               }
+               catch (SearchException e)
+               {
+                  log.warn("Unable to properly close searcher during lucene query: " + getQueryString(), e);
+               }
+            }
+         }
+      }
+      return this.resultSize;
+   }
+
+   public FullTextFilter enableFullTextFilter(String name)
+   {
+      if (filterDefinitions == null)
+      {
+         filterDefinitions = new HashMap<String, FullTextFilterImpl>();
+      }
+      FullTextFilterImpl filterDefinition = filterDefinitions.get(name);
+      if (filterDefinition != null) return filterDefinition;
+
+      filterDefinition = new FullTextFilterImpl();
+      filterDefinition.setName(name);
+      FilterDef filterDef = getSearchFactoryImplementor().getFilterDefinition(name);
+      if (filterDef == null)
+      {
+         throw new SearchException("Unkown @FullTextFilter: " + name);
+      }
+      filterDefinitions.put(name, filterDefinition);
+      return filterDefinition;
+   }
+
+   private SearchFactoryImplementor getSearchFactoryImplementor()
+   {
+      if (searchFactoryImplementor == null)
+      {
+         searchFactoryImplementor = createNewSearchFactoryImpl();
+      }
+      return searchFactoryImplementor;
+   }
+
+   private synchronized  SearchFactoryImplementor  createNewSearchFactoryImpl()
+   {
+      if (searchFactoryImplementor == null) searchFactoryImplementor = new SearchFactoryImpl(null); // TODO: This really expects a Hibernate Config object.  How can we work around that?@??
+      return searchFactoryImplementor;
+   }
+
+
+   public void disableFullTextFilter(String name)
+   {
+      filterDefinitions.remove(name);
+   }
+
+   public CacheQuery setFirstResult(int firstResult)
+   {
+      if (firstResult < 0)
+      {
+         throw new IllegalArgumentException("'first' pagination parameter less than 0");
+      }
+      this.firstResult = firstResult;
+      return this;
+   }
+
+   public CacheQuery setMaxResults(int maxResults)
+   {
+      return null;  //To change body of implemented methods use File | Settings | File Templates.
+   }
+
+   public CacheQuery setFetchSize(int i)
+   {
+      return null;  //To change body of implemented methods use File | Settings | File Templates.
+   }
+}

Modified: searchable/trunk/src/main/java/org/jboss/cache/search/NodeModifiedTransactionContext.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/NodeModifiedTransactionContext.java	2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/NodeModifiedTransactionContext.java	2008-06-16 14:05:46 UTC (rev 5988)
@@ -9,14 +9,12 @@
 import javax.transaction.SystemException;
 
 /**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 13, 2008
- * Time: 4:23:26 PM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani  - navin at surtani.org
  */
 public class NodeModifiedTransactionContext implements TransactionContext
 {
+
+   //TODO: Javadoc all these methods
    NodeModifiedEvent event;
 
    public boolean isTxInProgress()
@@ -42,7 +40,7 @@
       }
       catch (RollbackException e)
       {
-         e.printStackTrace();
+         e.printStackTrace();       
       }
 
    }

Modified: searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCache.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCache.java	2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCache.java	2008-06-16 14:05:46 UTC (rev 5988)
@@ -4,15 +4,18 @@
 import org.jboss.cache.Cache;
 
 /**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 10:48:46 AM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani  - navin at surtani.org
  */
 public interface SearchableCache extends Cache
 {
-   public QueryResult createQuery(Query luceneQuery);
 
+   /**
+    *
+    * @param luceneQuery
+    * @return
+    */
+   public CacheQuery createQuery(Query luceneQuery);
 
+   public CacheQuery createQuery(Query luceneQuery, Class... classes);
+
 }

Modified: searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheFactory.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheFactory.java	2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheFactory.java	2008-06-16 14:05:46 UTC (rev 5988)
@@ -4,21 +4,17 @@
 import org.jboss.cache.Cache;
 
 /**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 10:52:25 AM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani  - navin at surtani.org
  */
 public class SearchableCacheFactory
 {
-
+   //TODO: Javadoc everything.
    private SearchFactoryImpl searchFactory;
 
    public SearchableCache createSearchableCache (Cache c, Class...  classes)
    {
 
-      // TODO: Initialise HS internals
+      // TODO: Initialise HS internals and use the classes array that's being passed in as a param
 
       SearchableListener listener = new SearchableListener();
       c.addCacheListener(listener);

Modified: searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheImpl.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheImpl.java	2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/SearchableCacheImpl.java	2008-06-16 14:05:46 UTC (rev 5988)
@@ -17,11 +17,7 @@
 import java.util.Set;
 
 /**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 10:51:53 AM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani  - navin at surtani.org
  */
 public class SearchableCacheImpl implements SearchableCache
 {
@@ -29,19 +25,21 @@
    private Cache cache;
    private Class[] classes;
 
+   //TODO: Javadoc all these methods
+
    public SearchableCacheImpl(Cache cache)
    {
       this.cache = cache;
    }
 
-   public QueryResult createQuery(Query luceneQuery)
+   public CacheQuery createQuery(Query luceneQuery)
    {
-      return new QueryResultImpl(luceneQuery, cache);
+      return new CacheQueryImpl(luceneQuery, cache);
    }
 
-   public QueryResult createQuery(Query luceneQuery, Class... classes)
+   public CacheQuery createQuery(Query luceneQuery, Class... classes)
    {
-      return new QueryResultImpl(luceneQuery, cache, classes);
+      return new CacheQueryImpl(luceneQuery, cache, classes);
 
    }
 

Modified: searchable/trunk/src/main/java/org/jboss/cache/search/SearchableListener.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/SearchableListener.java	2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/SearchableListener.java	2008-06-16 14:05:46 UTC (rev 5988)
@@ -11,25 +11,19 @@
 import java.util.Map;
 
 /**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 11:42:50 AM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani  - navin at surtani.org
  */
 
 @CacheListener
 public class SearchableListener
 {
-
+//TODO: Javadoc everything
    private SearchFactoryImpl searchFactory;
    private TransactionContext transactionContext;
 
    @NodeModified
    public void updateLuceneIndexes(NodeModifiedEvent event)
    {
-      if (!event.isPre())
-      {
          if (event.getModificationType() == NodeModifiedEvent.ModificationType.valueOf("PUT_DATA"))
          {
           handlePutData(event);
@@ -39,12 +33,6 @@
          {
           handleDeleteData(event);
          }
-
-      }
-      else
-      {
-         //TODO: Ask Manik or EB about good ways to ignore the data. Just have souts? Perhaps log stuff.
-      }
    }
 
    void handlePutData(NodeModifiedEvent event)

Modified: searchable/trunk/src/main/java/org/jboss/cache/search/Transformer.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/Transformer.java	2008-06-13 15:36:15 UTC (rev 5987)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/Transformer.java	2008-06-16 14:05:46 UTC (rev 5988)
@@ -3,14 +3,11 @@
 import org.jboss.cache.Fqn;
 
 /**
- * Created by IntelliJ IDEA.
- * User: navin
- * Date: Jun 3, 2008
- * Time: 2:02:57 PM
- * To change this template use File | Settings | File Templates.
+ at author Navin Surtani  - navin at surtani.org
  */
 public class Transformer
 {
+   //TODO: Javadoc everything
    public static String getKey(String docId)
    {
       //docID comes in the format "Fqn=[/a/b/c]Key=[key]"
@@ -62,6 +59,5 @@
 
    }
 
-   //TODO: Look at HS documentation to see what can be done about non-String keys.
 
 }




More information about the jbosscache-commits mailing list