knguyen     2005/02/14 15:30:18 CET

  Modified files:
    core/src/java/org/jahia/engines/search Search_Engine.java 
  Added files:
    core/src/java/org/jahia/engines/search SearchHandler.java 
                                           SearchHandlerImpl.java 
  Log:
  - updated search service with file properties indexation and adv search
  
  Revision  Changes    Path
  1.1       +28 -0     
jahia/core/src/java/org/jahia/engines/search/SearchHandler.java (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/engines/search/SearchHandler.java?rev=1.1&content-type=text/plain
  1.1       +273 -0    
jahia/core/src/java/org/jahia/engines/search/SearchHandlerImpl.java (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/engines/search/SearchHandlerImpl.java?rev=1.1&content-type=text/plain
  1.5       +113 -52   
jahia/core/src/java/org/jahia/engines/search/Search_Engine.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/engines/search/Search_Engine.java.diff?r1=1.4&r2=1.5&f=h
  
  
  
  Index: SearchHandler.java
  ====================================================================
  package org.jahia.engines.search;
  
  import org.jahia.params.ParamBean;
  import org.jahia.data.search.JahiaSearchResult;
  import org.jahia.exceptions.JahiaException;
  
  import java.util.HashMap;
  
  /**
   * Created by IntelliJ IDEA.
   * User: hollis
   * Date: 8 f�vr. 2005
   * Time: 15:02:10
   * To change this template use File | Settings | File Templates.
   */
  public interface SearchHandler {
  
      public abstract void setName(String name);
  
      public abstract String getName();
  
      public abstract void init(ParamBean jParams, HashMap engineMap);
  
      public abstract JahiaSearchResult getSearchResult();
  
      public abstract JahiaSearchResult search(ParamBean jParams)  throws 
JahiaException;
  
  }
  
  
  
  Index: SearchHandlerImpl.java
  ====================================================================
  package org.jahia.engines.search;
  
  import org.jahia.params.ParamBean;
  import org.jahia.data.search.JahiaSearchResult;
  import org.jahia.registries.ServicesRegistry;
  import org.jahia.services.search.JahiaSearchResultHandlerImpl;
  import org.jahia.exceptions.JahiaException;
  
  import javax.servlet.ServletContext;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  import java.util.StringTokenizer;
  import java.util.HashMap;
  import java.util.ArrayList;
  
  /**
   * Created by IntelliJ IDEA.
   * User: hollis
   * Date: 8 f�vr. 2005
   * Time: 15:02:10
   * To change this template use File | Settings | File Templates.
   */
  public class SearchHandlerImpl implements SearchHandler {
  
      private String name;
      private String allWord = "";
      private String exactPhrase = "";
      private String oneOfWord = "";
      private String withoutWord = "";
      private ArrayList languageCodes = new ArrayList();
      private String screen = "";
  
      private String query = "";
  
      private JahiaSearchResult searchResult = null;
  
      public static final String ALL_WORD_SEARCH = "allWordSearch";
      public static final String EXACT_PHRASE_SEARCH = "exactPhraseSearch";
      public static final String ONE_OF_WORD_SEARCH = "oneOfWordSearch";
      public static final String WITHOUT_WORD_SEARCH = "withoutWordSearch";
  
      public SearchHandlerImpl(){
      }
  
      public void setName(String name){
          this.name = name;
      }
  
      public String getName(){
          return this.name;
      }
  
      public void init(ParamBean jParams, HashMap engineMap){
  
          HttpServletRequest request = jParams.getRequest();
  
          String value = (String) request.getParameter(ALL_WORD_SEARCH);
          if ( value != null ){
              this.allWord = value;
          }
  
          value = (String) request.getParameter(EXACT_PHRASE_SEARCH);
          if ( value != null ){
              this.exactPhrase = value;
          }
  
          value = (String) request.getParameter(ONE_OF_WORD_SEARCH);
          if ( value != null ){
              this.oneOfWord = value;
          }
  
          value = (String) request.getParameter(WITHOUT_WORD_SEARCH);
          if ( value != null ){
              this.withoutWord = value;
          }
  
          languageCodes = (ArrayList)engineMap.get("searchLanguageCodes");
          if ( languageCodes == null ){
              languageCodes = new ArrayList();
          }
  
          screen = (String)engineMap.get("screen");
          if ( screen == null ){
              screen = "execute";
          }
  
          buildQuery();
      }
  
      public JahiaSearchResult search(ParamBean jParams) throws JahiaException {
          if ( screen.equals("execute") ){
              searchResult = ServicesRegistry
                  .getInstance ().getJahiaSearchService ()
                  .doSearch (query, jParams, languageCodes);
          }
          if (searchResult == null) {
              searchResult = new JahiaSearchResult(new
                      JahiaSearchResultHandlerImpl());
          }
          return searchResult;
      }
  
      public JahiaSearchResult getSearchResult(){
          return this.searchResult;
      }
  
      public void buildQuery(){
          StringBuffer buffer = new StringBuffer();
          if ( !"".equals(this.getAllWord().trim()) ){
              StringBuffer searchQueryBuffer = new StringBuffer("");
              StringTokenizer tokenizer = new 
StringTokenizer(this.getAllWord().trim()," ");
              String token = null;
              if ( tokenizer.hasMoreElements() ){
                  searchQueryBuffer.append("(");
              }
              while ( tokenizer.hasMoreElements() ){
                  token = tokenizer.nextToken();
                  searchQueryBuffer.append(" +");
                  searchQueryBuffer.append(token);
              }
              if ( searchQueryBuffer.length()>0 ){
                  searchQueryBuffer.append(") ");
              }
              buffer.append(searchQueryBuffer.toString());
          }
          if ( !"".equals(this.getExactPhrase().trim()) ){
              if ( buffer.length()>0 ){
                  buffer.append(" AND ");
              }
              buffer.append("(");
              buffer.append('"' + this.getExactPhrase().trim() + '"');
              buffer.append(" )");
          }
          if ( !"".equals(this.getOneOfWord().trim()) ){
              StringBuffer searchQueryBuffer = new StringBuffer();
              StringTokenizer tokenizer = new 
StringTokenizer(this.getOneOfWord().trim()," ");
              String token = null;
              if ( tokenizer.hasMoreElements() ){
                  if ( buffer.length()>0 ){
                      buffer.append(" AND ");
                  }
                  buffer.append("(");
              }
              while ( tokenizer.hasMoreElements() ){
                  token = tokenizer.nextToken();
                  searchQueryBuffer.append(token);
                  if ( tokenizer.hasMoreElements() ){
                      searchQueryBuffer.append(" OR ");
                  }
              }
              if ( searchQueryBuffer.length()>0 ){
                  searchQueryBuffer.append(") ");
              }
              buffer.append(searchQueryBuffer.toString());
          }
          if ( !"".equals(this.getWithoutWord()) ){
              StringBuffer searchQueryBuffer = new StringBuffer();
              StringTokenizer tokenizer = new 
StringTokenizer(this.getWithoutWord().trim()," ");
              String token = null;
              if ( tokenizer.hasMoreElements() ){
                  if ( buffer.length()>0 ){
                      buffer.append(" AND ");
                  }
                  buffer.append("(");
              }
              while ( tokenizer.hasMoreElements() ){
                  token = tokenizer.nextToken();
                  searchQueryBuffer.append(" -");
                  searchQueryBuffer.append(token);
              }
              if ( searchQueryBuffer.length()>0 ){
                  searchQueryBuffer.append(") ");
              }
              buffer.append(searchQueryBuffer.toString());
          }
  
          query = buffer.toString();
  
          /*
          if ( ALL_WORD_SEARCH.equals(this.searchInput) ){
              StringBuffer searchQueryBuffer = new StringBuffer();
              StringTokenizer tokenizer = new StringTokenizer(query," ");
              String token = null;
              while ( tokenizer.hasMoreElements() ){
                  token = tokenizer.nextToken();
                  searchQueryBuffer.append(" +");
                  searchQueryBuffer.append(token);
              }
              query = searchQueryBuffer.toString();
          } else if ( EXACT_PHRASE_SEARCH.equals(this.searchInput) ) {
              query = '"' + query.trim() + '"';
          } else if ( ONE_OF_WORD_SEARCH.equals(this.searchInput) ){
              StringBuffer searchQueryBuffer = new StringBuffer();
              StringTokenizer tokenizer = new StringTokenizer(query," ");
              String token = null;
              while ( tokenizer.hasMoreElements() ){
                  token = tokenizer.nextToken();
                  searchQueryBuffer.append(token);
                  if ( tokenizer.hasMoreElements() ){
                      searchQueryBuffer.append(" OR ");
                  }
              }
              query = searchQueryBuffer.toString();
          } else if ( WITHOUT_WORD_SEARCH.equals(this.searchInput) ) {
              StringBuffer searchQueryBuffer = new StringBuffer();
              StringTokenizer tokenizer = new StringTokenizer(query," ");
              String token = null;
              while ( tokenizer.hasMoreElements() ){
                  token = tokenizer.nextToken();
                  searchQueryBuffer.append("-");
                  searchQueryBuffer.append(token);
              }
              query = searchQueryBuffer.toString();
          }*/
      }
  
      public String getAllWord() {
          return allWord;
      }
  
      public void setAllWord(String allWord) {
          this.allWord = allWord;
      }
  
      public String getExactPhrase() {
          return exactPhrase;
      }
  
      public void setExactPhrase(String exactPhrase) {
          this.exactPhrase = exactPhrase;
      }
  
      public String getOneOfWord() {
          return oneOfWord;
      }
  
      public void setOneOfWord(String oneOfWord) {
          this.oneOfWord = oneOfWord;
      }
  
      public String getWithoutWord() {
          return withoutWord;
      }
  
      public void setWithoutWord(String withoutWord) {
          this.withoutWord = withoutWord;
      }
  
      public ArrayList getLanguageCodes() {
          return languageCodes;
      }
  
      public void setLanguageCodes(ArrayList languageCodes) {
          this.languageCodes = languageCodes;
      }
  
      public String getScreen() {
          return screen;
      }
  
      public void setScreen(String screen) {
          this.screen = screen;
      }
  
      public String getQuery() {
          return query;
      }
  
      public void setQuery(String query) {
          this.query = query;
      }
  }
  
  
  
  Index: Search_Engine.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/engines/search/Search_Engine.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Search_Engine.java        17 Aug 2004 13:56:49 -0000      1.4
  +++ Search_Engine.java        14 Feb 2005 14:30:18 -0000      1.5
  @@ -24,6 +24,7 @@
   
   import java.util.ArrayList;
   import java.util.HashMap;
  +import java.util.Properties;
   
   import org.jahia.data.JahiaData;
   import org.jahia.data.search.JahiaSearchResult;
  @@ -34,6 +35,9 @@
   import org.jahia.registries.ServicesRegistry;
   import org.jahia.utils.JahiaTools;
   import org.jahia.services.search.*;
  +import org.jahia.services.fileextraction.FileExtractor;
  +import org.jahia.bin.Jahia;
  +import org.springframework.beans.factory.BeanFactory;
   
   
   /**
  @@ -54,6 +58,9 @@
   
       /** The engine's name. */
       public static final String ENGINE_NAME = "search";
  +    public static final String SEARCH_HANDLER = "searchHandler";
  +
  +    public static final String DEFAULT_CONFIG = "default";
   
       private static final String TEMPLATE_JSP = 
"/jsp/jahia/engines/search/searchresult.jsp";
       private static final String SEARCH_JSP_NAME = "searchresult.jsp";
  @@ -123,11 +130,22 @@
        */
       public EngineValidationHelper handleActions (ParamBean jParams, 
JahiaData jData)
               throws JahiaException {
  -        // initalizes the hashmap
  -//        HashMap engineMap = new HashMap();
  -        HashMap engineMap = (HashMap) jParams.getRequest ().getAttribute 
("engineMap");
  -        if (engineMap == null)
  +
  +        // init engineMap
  +        String theScreen = jParams.getRequest ().getParameter ("screen");
  +        HashMap engineMap = null;
  +        if (theScreen == null){
  +            theScreen = "execute";
               engineMap = new HashMap ();
  +        } else {
  +            engineMap = (HashMap) jParams.getSession().getAttribute 
("engineMap");
  +        }
  +        if ( engineMap == null ){
  +            engineMap = new HashMap();
  +        }
  +        engineMap.put("screen",theScreen);
  +        jParams.getSession().setAttribute("engineMap",engineMap);
  +        jParams.getRequest().setAttribute("engineMap", engineMap);
   
           processScreen (jParams, jData, engineMap);
   
  @@ -171,11 +189,73 @@
               }
           }
   
  -        String theScreen = jParams.getRequest ().getParameter ("screen");
  -        if (theScreen == null) {
  -            theScreen = "execute";
  +        String searchString = jParams.getRequest ().getParameter ("search");
  +        if (searchString == null) {
  +            searchString = (String) engineMap.get ("searchString");
  +        }
  +        if (searchString == null) {
  +            searchString = EMPTY_STRING;
  +        } else {
  +            searchString = searchString.trim ();
  +        }
  +        engineMap.put ("searchString", searchString);
  +
  +        // execute the search (called the 1st time)
  +        engineMap.put (ENGINE_OUTPUT_FILE_PARAM, theTemplate);
  +
  +        engineMap.put (RENDER_TYPE_PARAM, new Integer 
(JahiaEngine.RENDERTYPE_FORWARD));
  +        engineMap.put (ENGINE_NAME_PARAM, ENGINE_NAME);
  +        engineMap.put (ENGINE_URL_PARAM, jParams.composeEngineUrl 
(ENGINE_NAME, EMPTY_STRING));
  +        engineMap.put ("jahiaBuild", new Integer (jParams.settings 
().getBuildNumber ()));
  +        engineMap.put ("javascriptUrl", jParams.settings ().getJsHttpPath 
());
  +
  +        ArrayList languageCodes = new ArrayList ();
  +        String[] languageCodesVal = jParams.getRequest ().getParameterValues 
("searchlang");
  +        if (languageCodesVal != null) {
  +            if (!JahiaTools.inValues (Search_Engine.SEARCH_ALL_LANG, 
languageCodesVal)) {
  +                for (int i = 0; i < languageCodesVal.length; i++) {
  +                    languageCodes.add (languageCodesVal[i]);
  +                }
  +            }
  +        } else {
  +            languageCodes.add (jParams.getLocale ().toString ());
  +        }
  +        engineMap.put ("searchLanguageCodes", languageCodes);
  +
  +        // load search handler
  +        SearchHandler searchHandler = 
(SearchHandler)engineMap.get(SEARCH_HANDLER);
  +        if ( searchHandler == null ){
  +            String searchHandlerName = 
jParams.getRequest().getParameter(SEARCH_HANDLER);
  +            try {
  +                searchHandler = this.getSearchHandler(searchHandlerName);
  +                if ( searchHandler != null ){
  +                    searchHandler.setName(searchHandlerName);
  +                }
  +            } catch ( Throwable t ){
  +                logger.debug("Error determining search handler , name=" + 
searchHandlerName,t);
  +            }
  +        }
  +        if ( searchHandler != null ){
  +            searchHandler.init(jParams, engineMap);
  +            engineMap.put(SEARCH_HANDLER,searchHandler);
  +        }
  +
  +        String theScreen = (String)engineMap.get("screen");
  +        if ( searchHandler == null ){
  +            JahiaSearchResult searchResults = 
(JahiaSearchResult)engineMap.get("searchResults");
  +            if ( theScreen.equals("execute") || searchResults == null ){
  +                searchResults = ServicesRegistry
  +                    .getInstance ().getJahiaSearchService ()
  +                    .doSearch (searchString, jParams, languageCodes);
  +            }
  +            if (searchResults == null) {
  +                searchResults = new JahiaSearchResult(new
  +                        JahiaSearchResultHandlerImpl());
  +            }
  +            engineMap.put ("searchResults", searchResults);
           }
   
  +       /* Old Search navigation compatibility */
           if (jParams.getRequest ().getParameter ("from") != null) {
               engineMap.put ("searchResultFrom",
                       Integer.valueOf (jParams.getRequest ().getParameter 
("from")));
  @@ -184,17 +264,6 @@
               engineMap.put ("searchResultFrom", new Integer (1));
           }
   
  -        String searchString = (String) engineMap.get ("searchString");
  -        if (searchString == null) {
  -            searchString = jParams.getRequest ().getParameter ("search");
  -        }
  -
  -        if (searchString == null) {
  -            searchString = EMPTY_STRING;
  -        } else {
  -            searchString = searchString.trim ();
  -        }
  -
           Integer searchFrom = ((Integer) engineMap.get ("searchResultFrom"));
           if (searchFrom == null) {
               if (jParams.getRequest ().getParameter ("from") != null) {
  @@ -245,42 +314,34 @@
                           showStr + "&screen=next&search=" + searchString + 
"&from=" +
                   searchFrom.intValue ()));
   
  -        // execute the search (called the 1st time)
  -            engineMap.put (ENGINE_OUTPUT_FILE_PARAM, theTemplate);
  +        engineMap.put ("searchShow", searchShow);
   
  -            engineMap.put (RENDER_TYPE_PARAM, new Integer 
(JahiaEngine.RENDERTYPE_FORWARD));
  -            engineMap.put (ENGINE_NAME_PARAM, ENGINE_NAME);
  -            engineMap.put (ENGINE_URL_PARAM, jParams.composeEngineUrl 
(ENGINE_NAME, EMPTY_STRING));
  -            engineMap.put ("jahiaBuild", new Integer (jParams.settings 
().getBuildNumber ()));
  -            engineMap.put ("javascriptUrl", jParams.settings 
().getJsHttpPath ());
  -
  -            jParams.getRequest ().setAttribute ("engineMap", engineMap);
  -
  -            ArrayList languageCodes = new ArrayList ();
  -            String[] languageCodesVal = jParams.getRequest 
().getParameterValues ("searchlang");
  -            if (languageCodesVal != null) {
  -                if (!JahiaTools.inValues (Search_Engine.SEARCH_ALL_LANG, 
languageCodesVal)) {
  -                    for (int i = 0; i < languageCodesVal.length; i++) {
  -                        languageCodes.add (languageCodesVal[i]);
  -                    }
  -                }
  -            } else {
  -                languageCodes.add (jParams.getLocale ().toString ());
  -            }
  +        /** End Old search navigation compatibility **/
  +    }
   
  -            //logger.debug ("Searchstring: "+searchString);
  -        JahiaSearchResult searchResults = null;
  -        if ( theScreen.equals("execute") || engineMap.get("searchResults") 
== null ){
  -            searchResults = ServicesRegistry
  -                    .getInstance ().getJahiaSearchService ()
  -                    .doSearch (searchString, jParams, languageCodes);
  +    /**
  +     * Returns a search hanlder , given the config name.
  +     *
  +     * @param name
  +     * @return
  +     */
  +    public SearchHandler getSearchHandler(String name) throws Exception {
  +
  +        if ( name == null ){
  +            return null;
           }
  -            if (searchResults == null) {
  -            searchResults = new JahiaSearchResult(new
  -                JahiaSearchResultHandlerImpl());
  -            }
  -            engineMap.put ("searchShow", searchShow);
  -            engineMap.put ("searchResults", searchResults);
  -            engineMap.put ("searchString", searchString);
  +        BeanFactory bf = org.jahia.bin.Jahia.getConfigBeanFactory();
  +        Properties settings = (Properties)bf.getBean("searchConfig");
  +        if ( settings == null ){
  +            return null;
  +        }
  +        String className = settings.getProperty(name);
  +        if ( className != null ){
  +            Class c = Class.forName(className);
  +            return (SearchHandler)c.newInstance();
           }
  +        return null;
       }
  +
  +
  +}
  

Reply via email to