knguyen     2005/05/24 20:13:40 CEST

  Modified files:        (Branch: JAHIA-4-1-BRANCH)
    src/java/org/jahia/services/search AddedField.java 
                                       JahiaIndexableDocument.java 
                                       JahiaIndexableDocumentImpl.java 
                                       JahiaSearchBaseService.java 
                                       JahiaSearchService.java 
                                       ScheduledSiteIndexationJob.java 
                                       SearchEngine.java 
  Added files:           (Branch: JAHIA-4-1-BRANCH)
    src/java/org/jahia/services/search RAMIndexer.java 
  Log:
  - use an in-memory indexer ( limited in size ) as an index buffer for 
indexing the most recently updated content in a synchronous manner.
  
  Revision        Changes    Path
  1.14.2.8.2.7    +13 -0     
jahia/src/java/org/jahia/services/search/AddedField.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/AddedField.java.diff?r1=1.14.2.8.2.6&r2=1.14.2.8.2.7&f=h
  1.5.4.3         +6 -0      
jahia/src/java/org/jahia/services/search/JahiaIndexableDocument.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaIndexableDocument.java.diff?r1=1.5.4.2&r2=1.5.4.3&f=h
  1.5.2.1.2.3     +15 -0     
jahia/src/java/org/jahia/services/search/JahiaIndexableDocumentImpl.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaIndexableDocumentImpl.java.diff?r1=1.5.2.1.2.2&r2=1.5.2.1.2.3&f=h
  1.42.2.15.2.10  +163 -90   
jahia/src/java/org/jahia/services/search/JahiaSearchBaseService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaSearchBaseService.java.diff?r1=1.42.2.15.2.9&r2=1.42.2.15.2.10&f=h
  1.10.4.2.2.4    +29 -0     
jahia/src/java/org/jahia/services/search/JahiaSearchService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaSearchService.java.diff?r1=1.10.4.2.2.3&r2=1.10.4.2.2.4&f=h
  1.1.2.1         +200 -0    
jahia/src/java/org/jahia/services/search/RAMIndexer.java (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/RAMIndexer.java?rev=1.1.2.1&content-type=text/plain
  1.1.2.5         +1 -1      
jahia/src/java/org/jahia/services/search/ScheduledSiteIndexationJob.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/ScheduledSiteIndexationJob.java.diff?r1=1.1.2.4&r2=1.1.2.5&f=h
  1.17.2.1.2.1    +41 -6     
jahia/src/java/org/jahia/services/search/SearchEngine.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/SearchEngine.java.diff?r1=1.17.2.1&r2=1.17.2.1.2.1&f=h
  
  
  
  
  
  
  Index: AddedField.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/AddedField.java,v
  retrieving revision 1.14.2.8.2.6
  retrieving revision 1.14.2.8.2.7
  diff -u -r1.14.2.8.2.6 -r1.14.2.8.2.7
  --- AddedField.java   18 May 2005 13:54:58 -0000      1.14.2.8.2.6
  +++ AddedField.java   24 May 2005 18:13:40 -0000      1.14.2.8.2.7
  @@ -377,4 +377,17 @@
           this.getFields();
       }
   
  +    /**
  +     * Return true if this document is allowed to be indexed by RAMIndexer
  +     *
  +     * @return
  +     */
  +    public boolean isCacheableWithRAMIndexer() {
  +        if ( this.getType() == FieldTypes.FILE ||
  +             !super.isCacheableWithRAMIndexer() ){
  +            return false;
  +        }
  +        return true;
  +    }
  +
   }
  
  
  
  Index: JahiaIndexableDocument.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaIndexableDocument.java,v
  retrieving revision 1.5.4.2
  retrieving revision 1.5.4.3
  diff -u -r1.5.4.2 -r1.5.4.3
  --- JahiaIndexableDocument.java       27 Apr 2005 13:41:11 -0000      1.5.4.2
  +++ JahiaIndexableDocument.java       24 May 2005 18:13:40 -0000      1.5.4.3
  @@ -166,4 +166,10 @@
       public abstract void doScheduledLoad();
   
   
  +    /**
  +     * Return true if this document is allowed to be indexed by RAMIndexer
  +     *
  +     * @return
  +     */
  +    public boolean isCacheableWithRAMIndexer();
   }
  
  
  
  Index: JahiaIndexableDocumentImpl.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaIndexableDocumentImpl.java,v
  retrieving revision 1.5.2.1.2.2
  retrieving revision 1.5.2.1.2.3
  diff -u -r1.5.2.1.2.2 -r1.5.2.1.2.3
  --- JahiaIndexableDocumentImpl.java   27 Apr 2005 13:41:11 -0000      
1.5.2.1.2.2
  +++ JahiaIndexableDocumentImpl.java   24 May 2005 18:13:40 -0000      
1.5.2.1.2.3
  @@ -30,6 +30,8 @@
   
       protected boolean toBeAdded = true;
   
  +    protected boolean isCacheableWithRAMIndexer = true;
  +
   
       /**
        * @param siteId
  @@ -269,4 +271,17 @@
           // by default do nothing
       }
   
  +    /**
  +     * Return true if this document is allowed to be indexed by RAMIndexer
  +     *
  +     * @return
  +     */
  +    public boolean isCacheableWithRAMIndexer() {
  +        return this.isCacheableWithRAMIndexer;
  +    }
  +
  +    public void setCacheableWithRAMIndexer(boolean cacheableWithRAMIndexer) {
  +        this.isCacheableWithRAMIndexer = cacheableWithRAMIndexer;
  +    }
  +
   }
  
  
  
  Index: JahiaSearchBaseService.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchBaseService.java,v
  retrieving revision 1.42.2.15.2.9
  retrieving revision 1.42.2.15.2.10
  diff -u -r1.42.2.15.2.9 -r1.42.2.15.2.10
  --- JahiaSearchBaseService.java       23 May 2005 19:35:15 -0000      
1.42.2.15.2.9
  +++ JahiaSearchBaseService.java       24 May 2005 18:13:40 -0000      
1.42.2.15.2.10
  @@ -103,10 +103,14 @@
   
       private BeanFactory fileExtractorsFactory = null;
   
  +    private Properties searchSettings = null;
  +
       private Cache fullSiteIndexationJobsCache;
   
       private HashMap sitesLastOptimizedTime = new HashMap();
   
  +    private RAMIndexer ramIndexer;
  +
       /**
        * Constructor
        * Client should always call getInstance() method
  @@ -115,6 +119,7 @@
           logger.debug ("***** Starting the Jahia Search Service *****");
           String[] stopWorld = {};
           analyzer = new StandardAnalyzer (stopWorld);
  +
           searchHandlers = new Properties ();
           searchHandlers.setProperty (JahiaSearcher.PAGE_SEARCHER, 
"doPageSearch");
           searchHandlers.setProperty (JahiaSearcher.CONTAINER_SEARCHER,
  @@ -147,6 +152,8 @@
   
               configureSystemProperties();
   
  +            loadSearchSettings();
  +
               indexOrdersCache = CacheFactory.getInstance().createCache(
                   SEARCH_INDEX_ORDERS_CACHE);
               indexOrdersCache.registerListener(this);
  @@ -238,6 +245,23 @@
           }
       }
   
  +    private void loadSearchSettings() throws JahiaInitializationException{
  +        searchSettings = 
(Properties)Jahia.getConfigBeanFactory().getBean("searchSettings");
  +        if ( searchSettings == null ){
  +            throw new JahiaInitializationException("searchSettings bean not 
found in config.xml");
  +        }
  +        String val = searchSettings.getProperty("inMemoryIndexe.allowed");
  +        if ( "true".equalsIgnoreCase(val) ){
  +            int i = 1000;
  +            try {
  +                i = Integer.parseInt(searchSettings
  +                                     .getProperty("inMemoryIndexe.maxDocs"));
  +            } catch ( Throwable t ){
  +            }
  +            this.ramIndexer = new RAMIndexer(analyzer,i);
  +        }
  +    }
  +
       private void startScheduledIndexationJob(){
   
           this.scheduledIndexationJob = new 
IndexationJobDetail("scheduledIndexation" + "_Job", Scheduler.DEFAULT_GROUP,
  @@ -318,6 +342,10 @@
               notifyAll();
           }
           // give it a change to finish right now if it's not processing 
anything.
  +        if ( this.ramIndexer != null ){
  +            this.ramIndexer.shutDown();
  +        }
  +
           Thread.yield();
           mIsServiceInitialized = false;
       }
  @@ -345,11 +373,21 @@
                addToIndexOrder(indObj);
           }
           indexOrdersCache.put(getCacheKey(indObj), indObj);
  +        addToRAMIndexer(indObj,indObj.getSiteId());
           synchronized(lock){
               lock.notifyAll();
           }
       }
   
  +    private void addToRAMIndexer(JahiaIndexableDocument doc, int siteId){
  +        if ( ramIndexer == null || doc == null ){
  +            return;
  +        }
  +        if ( doc.isCacheableWithRAMIndexer() ){
  +            ramIndexer.addDoc(getLuceneDocument(doc), siteId);
  +        }
  +    }
  +
       /**
        * this method is should only be used by the ScheduledIndexationJob to 
return back a scheduled document in the indexation queue without sending it to 
the other clusters
        *
  @@ -373,9 +411,10 @@
       }
   
       private void addToIndexOrder(JahiaIndexableDocument indObj){
  -       if ( indObj == null ){
  -           return;
  -       }
  +        if ( indObj == null ){
  +            return;
  +        }
  +
          JahiaIndexableDocument doc = null;
          int size = this.indexOrders.size();
          Vector result = new Vector();
  @@ -453,6 +492,10 @@
           removeFromSearchEngine (doc);
       }
   
  +    public RAMIndexer getRAMIndexer(){
  +        return ramIndexer;
  +    }
  +
       
//--------------------------------------------------------------------------
       /**
        * Perform a search for a given JahiaSearcher object.
  @@ -464,7 +507,6 @@
       public JahiaSearchResult search (JahiaSearcher jSearcher, ParamBean 
jParams)
               throws JahiaException {
           logger.debug ("Started");
  -
           JahiaSearchResult result = null;
           IndexReader reader = null;
           try {
  @@ -533,50 +575,62 @@
       public synchronized void indexField (int fieldID,
                                            boolean stagingOnly,
                                            ParamBean jParams) {
  +        indexField(fieldID,stagingOnly,jParams,false);
  +   }
   
  -        ServicesRegistry sReg = ServicesRegistry.getInstance ();
  -
  -        try {
  -            // init the JahiaContentFieldFacade
  -
  -            ContentField contentField = ContentField.getField (fieldID);
  -            ArrayList localeList = new ArrayList ();
  -            Vector siteLanguageSettings = jParams.getSite 
().getLanguageSettings ();
  -            if (siteLanguageSettings != null) {
  -                for (int i = 0; i < siteLanguageSettings.size (); i++) {
  -                    SiteLanguageSettings curSetting = (SiteLanguageSettings)
  -                            siteLanguageSettings.elementAt (i);
  -                    if (curSetting.isActivated ()) {
  -                        Locale tempLocale = LanguageCodeConverters.
  -                                languageCodeToLocale (curSetting.
  -                                getCode ());
  -                        localeList.add (tempLocale);
  -                    }
  -                }
  -            }
  -
  -            JahiaContentFieldFacade jahiaContentFieldFacade =
  -                    new JahiaContentFieldFacade (fieldID, LoadFlags.TEXTS, 
jParams,
  -                            localeList, false);
  -            Enumeration enum = jahiaContentFieldFacade.getFields ();
  -            JahiaField aField = null;
  -            while (enum.hasMoreElements ()) {
  -                aField = (JahiaField) enum.nextElement ();
  -                if ( stagingOnly && aField.getWorkflowState()
  -                     == EntryLoadRequest.ACTIVE_WORKFLOW_STATE ){
  -                    continue;
  -                }
  -                /*
  -                if ( aField.getVersionID()
  -                     == EntryLoadRequest.DELETED_WORKFLOW_STATE ){
  -                    continue;
  -                }*/
  +   
//--------------------------------------------------------------------------
  +   /**
  +    * Re-index a field.
  +    *
  +    * @param fieldID int
  +    * @param stagingOnly boolean, if false, skip re-index active version
  +    * @param jParams ParamBean
  +    * @param allowInMemoryIndexe boolean if true, index in in memory index ( 
temporary and limited momory-size index )
  +    */
  +   public synchronized void indexField (int fieldID,
  +                                        boolean stagingOnly,
  +                                        ParamBean jParams,
  +                                        boolean allowInMemoryIndexe ) {
  +       ServicesRegistry sReg = ServicesRegistry.getInstance ();
  +
  +       try {
  +           // init the JahiaContentFieldFacade
  +
  +           ContentField contentField = ContentField.getField (fieldID);
  +           ArrayList localeList = new ArrayList ();
  +           Vector siteLanguageSettings = jParams.getSite 
().getLanguageSettings ();
  +           if (siteLanguageSettings != null) {
  +               for (int i = 0; i < siteLanguageSettings.size (); i++) {
  +                   SiteLanguageSettings curSetting = (SiteLanguageSettings)
  +                           siteLanguageSettings.elementAt (i);
  +                   if (curSetting.isActivated ()) {
  +                       Locale tempLocale = LanguageCodeConverters.
  +                               languageCodeToLocale (curSetting.
  +                               getCode ());
  +                       localeList.add (tempLocale);
  +                   }
  +               }
  +           }
   
  -                this.addFieldToSearchEngine (aField, aField.getWorkflowState 
());
  -            }
  -        } catch (Throwable t) {
  -            t.printStackTrace ();
  -        }
  +           JahiaContentFieldFacade jahiaContentFieldFacade =
  +                   new JahiaContentFieldFacade (fieldID, LoadFlags.TEXTS, 
jParams,
  +                           localeList, false);
  +           Enumeration enum = jahiaContentFieldFacade.getFields ();
  +           JahiaField aField = null;
  +           while (enum.hasMoreElements ()) {
  +               aField = (JahiaField) enum.nextElement ();
  +               if ( stagingOnly && aField.getWorkflowState()
  +                    == EntryLoadRequest.ACTIVE_WORKFLOW_STATE ){
  +                   continue;
  +               }
  +
  +               this.addFieldToSearchEngine (aField,
  +                                            aField.getWorkflowState (),
  +                                            allowInMemoryIndexe);
  +           }
  +       } catch (Throwable t) {
  +           t.printStackTrace ();
  +       }
      }
   
      
//--------------------------------------------------------------------------
  @@ -590,53 +644,70 @@
       */
       public synchronized void addFieldToSearchEngine (JahiaField aField,
                                                        int workflowState) {
  -        if (aField == null)
  -            return;
  -
  -        int wfState = workflowState;
  -        if (wfState > EntryLoadRequest.ACTIVE_WORKFLOW_STATE) {
  -            wfState = EntryLoadRequest.STAGING_WORKFLOW_STATE;
  -        }
  -
  -        try {
  -            HashMap values = aField.getValuesForSearch ();
  -            if (values == null || values.size () == 0) {
  -                return;
  -            }
  -            Iterator iterator = values.keySet ().iterator ();
  -            while (iterator.hasNext ()) {
  -                String languageCode = (String) iterator.next ();
  -
  -                StringBuffer key = new StringBuffer (String.valueOf 
(aField.getID()));
  -                key.append ("_");
  -                key.append (wfState);
  -                key.append ("_");
  -                key.append (languageCode);
  -
  -                AddedField addedField = new AddedField (aField, wfState,
  -                        JahiaSearchConstant.FIELD_KEY, key.toString());
  -                addedField.setLanguageCode (languageCode);
  -                Object[] value = (Object[]) values.get (languageCode);
  -                addedField.setValues (value);
  -                if (addedField.beforeAddingToSearchEngine ()) {
  -                    if ( this.localIndexing ){
  -                         addToIndexOrder(addedField);
  -                    }
  -                    indexOrdersCache.put(getCacheKey(addedField),addedField);
  -                }
  -            }
  -        } catch (Throwable t) {
  -            t.printStackTrace ();
  -        } finally {
  -            synchronized(lock){
  -                lock.notifyAll();
  -            }
  -        }
  -
  +        addFieldToSearchEngine(aField, workflowState, false);
       }
   
       
//--------------------------------------------------------------------------
       /**
  +     * Add a field to search engine.
  +     * With updated field, you should remove it first from search engine 
before
  +     * adding it again.
  +     *
  +     * @param JahiaField    aField, the field to index.
  +     * @param workflowState effective workflow state to use
  +     * @param allowInMemoryIndexe boolean if true, index in in memory index 
( temporary and limited momory-size index )
  +     */
  +     public synchronized void addFieldToSearchEngine (JahiaField aField,
  +                                                      int workflowState,
  +                                                      boolean 
allowInMemoryIndexe) {
  +         if (aField == null)
  +             return;
  +
  +         int wfState = workflowState;
  +         if (wfState > EntryLoadRequest.ACTIVE_WORKFLOW_STATE) {
  +             wfState = EntryLoadRequest.STAGING_WORKFLOW_STATE;
  +         }
  +
  +         try {
  +             HashMap values = aField.getValuesForSearch ();
  +             if (values == null || values.size () == 0) {
  +                 return;
  +             }
  +             Iterator iterator = values.keySet ().iterator ();
  +             while (iterator.hasNext ()) {
  +                 String languageCode = (String) iterator.next ();
  +
  +                 StringBuffer key = new StringBuffer (String.valueOf 
(aField.getID()));
  +                 key.append ("_");
  +                 key.append (wfState);
  +                 key.append ("_");
  +                 key.append (languageCode);
  +
  +                 AddedField addedField = new AddedField (aField, wfState,
  +                         JahiaSearchConstant.FIELD_KEY, key.toString());
  +                 addedField.setLanguageCode (languageCode);
  +                 Object[] value = (Object[]) values.get (languageCode);
  +                 addedField.setValues (value);
  +                 if (addedField.beforeAddingToSearchEngine ()) {
  +                     if ( this.localIndexing ){
  +                          addToIndexOrder(addedField);
  +                     }
  +                     
addedField.setCacheableWithRAMIndexer(allowInMemoryIndexe);
  +                     addToRAMIndexer(addedField, addedField.getSiteId());
  +                     
indexOrdersCache.put(getCacheKey(addedField),addedField);
  +                 }
  +             }
  +         } catch (Throwable t) {
  +             t.printStackTrace ();
  +         } finally {
  +             synchronized(lock){
  +                 lock.notifyAll();
  +             }
  +         }
  +     }
  +
  +    
//--------------------------------------------------------------------------
  +    /**
        * Remove a field from search engine.Remove all entry ( all 
lang,workflow...)
        *
        * @param JahiaField aField, the field to remove.
  @@ -1536,7 +1607,9 @@
           if ( SEARCH_INDEX_ORDERS_CACHE.equals(cacheName)
                && entryKey != null && entryValue != null ){
               CacheEntry cacheEntry = (CacheEntry)entryValue;
  -            addToIndexOrder((JahiaIndexableDocument)cacheEntry.getObject());
  +            JahiaIndexableDocument doc = 
(JahiaIndexableDocument)cacheEntry.getObject();
  +            addToIndexOrder(doc);
  +            addToRAMIndexer(doc,doc.getSiteId());
               logger.debug("Search Cache listener : added value in 
indexOrders");
               synchronized(lock){
                   lock.notifyAll();
  
  
  
  Index: JahiaSearchService.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchService.java,v
  retrieving revision 1.10.4.2.2.3
  retrieving revision 1.10.4.2.2.4
  diff -u -r1.10.4.2.2.3 -r1.10.4.2.2.4
  --- JahiaSearchService.java   20 May 2005 11:45:50 -0000      1.10.4.2.2.3
  +++ JahiaSearchService.java   24 May 2005 18:13:40 -0000      1.10.4.2.2.4
  @@ -125,6 +125,19 @@
   
       
//--------------------------------------------------------------------------
       /**
  +     * Re-index a field.
  +     *
  +     * @param fieldID int
  +     * @param stagingOnly boolean, if false, skip re-index active version
  +     * @param jParams ParamBean
  +     * @param allowInMemoryIndexe boolean if true, index in in memory index 
( temporary and limited momory-size index )
  +     */
  +    public abstract void indexField (int fieldID,
  +                                     boolean stagingOnly,
  +                                     ParamBean jParams, boolean 
allowInMemoryIndexe);
  +
  +    
//--------------------------------------------------------------------------
  +    /**
        * Add a field to search engine.
        * With updated field, you should remove it first from search engine 
before
        * adding it again.
  @@ -136,6 +149,20 @@
   
       
//--------------------------------------------------------------------------
       /**
  +     * Add a field to search engine.
  +     * With updated field, you should remove it first from search engine 
before
  +     * adding it again.
  +     *
  +     * @param JahiaField    aField, the field to index.
  +     * @param workflowState effective workflow state to use
  +     * @param allowInMemoryIndexe boolean if true, index in in memory index 
( temporary and limited momory-size index )
  +     */
  +     public abstract void addFieldToSearchEngine (JahiaField aField,
  +                                                      int workflowState,
  +                                                      boolean 
allowInMemoryIndexe);
  +
  +    
//--------------------------------------------------------------------------
  +    /**
        * Remove a field from search engine.
        *
        * @param JahiaField aField, the field to remove.
  @@ -245,4 +272,6 @@
        */
       public abstract int getNbDocumentsInQueue();
   
  +    public abstract RAMIndexer getRAMIndexer();
  +
   }
  
  
  
  Index: ScheduledSiteIndexationJob.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/ScheduledSiteIndexationJob.java,v
  retrieving revision 1.1.2.4
  retrieving revision 1.1.2.5
  diff -u -r1.1.2.4 -r1.1.2.5
  --- ScheduledSiteIndexationJob.java   23 May 2005 19:35:15 -0000      1.1.2.4
  +++ ScheduledSiteIndexationJob.java   24 May 2005 18:13:40 -0000      1.1.2.5
  @@ -90,7 +90,7 @@
                   }
               }
               try {
  -                
sReg.getJahiaSearchService().indexField(fieldID,false,jParams);
  +                
sReg.getJahiaSearchService().indexField(fieldID,false,jParams,false);
               }
               catch (Throwable t) {
                   // page could not exists
  
  
  
  Index: SearchEngine.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/SearchEngine.java,v
  retrieving revision 1.17.2.1
  retrieving revision 1.17.2.1.2.1
  diff -u -r1.17.2.1 -r1.17.2.1.2.1
  --- SearchEngine.java 20 Oct 2004 15:08:56 -0000      1.17.2.1
  +++ SearchEngine.java 24 May 2005 18:13:40 -0000      1.17.2.1.2.1
  @@ -20,10 +20,7 @@
   import org.apache.lucene.index.IndexReader;
   import org.apache.lucene.queryParser.QueryParser;
   import org.apache.lucene.document.Document;
  -import org.apache.lucene.search.Hits;
  -import org.apache.lucene.search.IndexSearcher;
  -import org.apache.lucene.search.Query;
  -import org.apache.lucene.search.Searcher;
  +import org.apache.lucene.search.*;
   import org.apache.regexp.RE;
   import org.apache.regexp.RESyntaxException;
   import org.jahia.data.fields.FieldTypes;
  @@ -95,10 +92,16 @@
           if (reader == null || jSearcher == null || jSearcher.getQuery () == 
null)
               return result;
   
  +        Searchable ramSearchable = null;
           try {
               // instanciate the searcher with the site index.
               Searcher searcher = new IndexSearcher (reader);
   
  +            RAMIndexer ramIndexer = 
ServicesRegistry.getInstance().getJahiaSearchService().getRAMIndexer();
  +            if ( ramIndexer != null ){
  +                ramSearchable = ramIndexer.getSearcher(jParams.getSiteID());
  +            }
  +
               String formattedSearchQuery = getFormattedSearchQuery 
(jSearcher, jParams);
   
               // instanciate the query
  @@ -107,7 +110,13 @@
                       analyzer);
   
               // get the search result.
  -            Hits hits = searcher.search (query);
  +            Hits hits = null;
  +            if ( ramSearchable == null ){
  +                hits = searcher.search (query);
  +            } else {
  +                MultiSearcher multiSearcher = new MultiSearcher(new 
Searchable[]{searcher,ramSearchable});
  +                hits = multiSearcher.search(query);
  +            }
   
               Vector parsedObjects = getParsedObjects(hits);
               if ( parsedObjects == null ){
  @@ -117,6 +126,13 @@
   
           } catch (Throwable t) {
               logger.error (t);
  +        } finally {
  +            if ( ramSearchable != null ){
  +                try {
  +                    ramSearchable.close();
  +                } catch ( Throwable t){
  +                }
  +            }
           }
           return result;
       }
  @@ -144,6 +160,7 @@
               return result;
   
           StringBuffer buff = new StringBuffer (1024);
  +        Searchable ramSearchable = null;
           try {
   
               ContainerSearcher cSearcher = (ContainerSearcher) jSearcher;
  @@ -207,8 +224,20 @@
                       JahiaSearchConstant.FIELD_VALUE,
                       this.analyzer);
   
  +            RAMIndexer ramIndexer = 
ServicesRegistry.getInstance().getJahiaSearchService().getRAMIndexer();
  +            if ( ramIndexer != null ){
  +                ramSearchable = ramIndexer.getSearcher(jParams.getSiteID());
  +            }
  +
               // get the search result.
  -            Hits hits = searcher.search (query);
  +            Hits hits = null;
  +            if ( ramSearchable == null ){
  +                hits = searcher.search (query);
  +            } else {
  +                MultiSearcher multiSearcher = new MultiSearcher(new 
Searchable[]{searcher,ramSearchable});
  +                hits = multiSearcher.search(query);
  +            }
  +
               if (hits == null || hits.length () == 0)
                   return result;
   
  @@ -226,6 +255,12 @@
               logger.error (t);
           } finally {
               buff = null;
  +            if ( ramSearchable != null ){
  +                try {
  +                    ramSearchable.close();
  +                } catch ( Throwable t){
  +                }
  +            }
           }
           return result;
       }
  

Reply via email to