knguyen     2005/05/31 15:32:50 CEST

  Modified files:
    core/src/java/org/jahia/services/search/lucene 
                                                   
AbstractLuceneSearchHandler.java 
  Added files:
    core/src/java/org/jahia/services/search/lucene 
                                                   LuceneContainerSearcher.java 
  Log:
  - extending container search to allow passing lucene filters
  
  Revision  Changes    Path
  1.2       +11 -1     
jahia/core/src/java/org/jahia/services/search/lucene/AbstractLuceneSearchHandler.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/search/lucene/AbstractLuceneSearchHandler.java.diff?r1=1.1&r2=1.2&f=h
  1.1       +155 -0    
jahia/core/src/java/org/jahia/services/search/lucene/LuceneContainerSearcher.java
 (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/search/lucene/LuceneContainerSearcher.java?rev=1.1&content-type=text/plain
  
  
  
  Index: LuceneContainerSearcher.java
  ====================================================================
  //
  //                                   ____.
  //                       __/\ ______|    |__/\.     _______
  //            __   .____|    |       \   |    +----+       \
  //    _______|  /--|    |    |    -   \  _    |    :    -   \_________
  //   \\______: :---|    :    :           |    :    |         \________>
  //           |__\---\_____________:______:    :____|____:_____\
  //                                      /_____|
  //
  //                 . . . i n   j a h i a   w e   t r u s t . . .
  //
  //
  //
  //
  
  package org.jahia.services.search.lucene;
  
  import org.jahia.data.search.JahiaSearchResult;
  import org.jahia.exceptions.JahiaException;
  import org.jahia.params.ParamBean;
  import org.jahia.registries.ServicesRegistry;
  import org.jahia.services.version.EntryLoadRequest;
  import org.jahia.services.sites.JahiaSite;
  import org.jahia.services.search.*;
  import org.apache.xpath.operations.*;
  import org.apache.lucene.search.Filter;
  
  import java.util.*;
  import java.lang.String;
  
  
  /**
   * Handle containers search.
   * The result for this searcher is an instance of JahiaSearchResult
   * with a vector of matching container ids.
   *
   * @author Khue Nguyen <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   */
  
  public class LuceneContainerSearcher extends ContainerSearcher {
  
      private static org.apache.log4j.Logger logger =
              org.apache.log4j.Logger.getLogger (LuceneContainerSearcher.class);
  
      private Filter filter;
  
      /**
       * Constructor for one single container list search
       * The expected result is a JahiaSearchResult object containing a vector 
of matching containers.
       * The vector contained in the JahiaSearchResult is a vector of matching 
ctn ids, not the containers.
       * No right check on container, only on field.
       *
       * @param ctnListID the container list id.
       * @param ctnListID
       * @param query       a valid Lucene search query
       * @param loadRequest
       */
      public LuceneContainerSearcher (int ctnListID, String query, 
EntryLoadRequest loadRequest) {
          super(ctnListID, query, loadRequest);
      }
  
      /**
       * Constructor for one single container list search
       * The expected result is a JahiaSearchResult object containing a vector 
of matching containers.
       * The vector contained in the JahiaSearchResult is a vector of matching 
ctn ids, not the containers.
       * No right check on container, only on field.
       *
       * @param ctnListID
       * @param containerLevel
       * @param query
       * @param loadRequest
       */
      public LuceneContainerSearcher (int ctnListID, int containerLevel, String 
query,
                                EntryLoadRequest loadRequest) {
          super(ctnListID, containerLevel, query, loadRequest);
      }
  
      /**
       * Constructor for a single container list
       *
       * @param containerListName
       * @param params
       * @param query
       * @param loadRequest
       *
       * @throws org.jahia.exceptions.JahiaException
       */
      public LuceneContainerSearcher (String containerListName, ParamBean 
params, String query,
                                EntryLoadRequest loadRequest)
              throws JahiaException {
          super(containerListName, params, query, loadRequest);
      }
  
  
      /**
       * Constructor for searching containers of one Site or all Sites,
       * and of one definition or of any definition
       * If siteId = -1 -> search on all sites
       * If containerDefinitionName is null -> ignore container definition type
       * The expected result is a JahiaSearchResult object containing a vector 
of matching containers.
       * The vector contained in the JahiaSearchResult is a vector of matching 
ctn ids, not the containers.
       * No right check on container, only on field.
       *
       * @param siteId
       * @param containerDefinitionName
       * @param query
       * @param loadRequest                                                   
       */
      public LuceneContainerSearcher (int siteId, String 
containerDefinitionName,
                                String query, EntryLoadRequest loadRequest) {
          super(siteId, containerDefinitionName, query, loadRequest);
      }
  
      public LuceneContainerSearcher (Integer[] siteIds, String 
containerDefinitionName,
                                String query, EntryLoadRequest loadRequest) {
          super(siteIds, containerDefinitionName, query, loadRequest);
      }
  
      /**
       * Lucene implementation
       *
       * @param query
       * @param searchHandlers
       * @param jParams
       * @return
       * @throws JahiaException
       */
      protected SearchResult doSearch(String query, String[] searchHandlers, 
ParamBean jParams)
              throws JahiaException {
  
          SearchResult result = new SearchResultImpl();
          ServicesRegistry sReg = ServicesRegistry.getInstance();
          String name;
          SearchHandler searchHandler = null;
          for ( int i=0; i<searchHandlers.length; i++ ){
              searchHandler = sReg.getJahiaSearchService().getSearchManager()
                      .getSearchHandler(searchHandlers[i]);
              if ( searchHandler instanceof AbstractLuceneSearchHandler ){
                  ((AbstractLuceneSearchHandler)searchHandler).search(query, 
result,filter);
              } else {
                  searchHandler.search(query,result);
              }
          }
          return result;
      }
  
      public Filter getFilter() {
          return filter;
      }
  
      public void setFilter(Filter filter) {
          this.filter = filter;
      }
  
  }
  
  
  
  Index: AbstractLuceneSearchHandler.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/search/lucene/AbstractLuceneSearchHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractLuceneSearchHandler.java  22 Apr 2005 13:11:04 -0000      1.1
  +++ AbstractLuceneSearchHandler.java  31 May 2005 13:32:49 -0000      1.2
  @@ -14,6 +14,7 @@
   import java.io.IOException;
   
   
  +
   /**
    * Created by IntelliJ IDEA.
    * User: hollis
  @@ -81,6 +82,10 @@
       }
   
       public void search(String query, SearchResult collector){
  +        this.search(query,collector,null);
  +    }
  +
  +    public void search(String query, SearchResult collector, Filter filter){
           SearchResult result = null;
           IndexReader reader = null;
           try {
  @@ -89,7 +94,12 @@
               Query q = QueryParser.parse(query,
                       IndexableDocument.DEFAULT_FULLTEXT_SEARCH_FIELD,
                       this.analyzer);
  -            Hits hits = searcher.search (q);
  +            Hits hits = null;
  +            if ( filter != null ){
  +                searcher.search(q, filter);
  +            } else {
  +                searcher.search(q);
  +            }
               result = getSearchResult(hits);
               collector.results().addAll(result.results());
           } catch ( Throwable t ){
  

Reply via email to