knguyen     2005/06/08 22:53:46 CEST

  Modified files:        (Branch: JAHIA-4-1-BRANCH)
    src/java/org/jahia/services/search AddedField.java 
                                       JahiaSearchBaseService.java 
                                       RAMIndexer.java 
                                       RemovedField.java 
                                       ScheduledSiteIndexationJob.java 
                                       SearchEngine.java 
                                       SiteIndexationStatus.java 
  Log:
  search
  
  Revision        Changes    Path
  1.14.2.8.2.8    +2 -1      
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.7&r2=1.14.2.8.2.8&f=h
  1.42.2.15.2.20  +97 -30    
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.19&r2=1.42.2.15.2.20&f=h
  1.1.2.4         +64 -25    
jahia/src/java/org/jahia/services/search/RAMIndexer.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/RAMIndexer.java.diff?r1=1.1.2.3&r2=1.1.2.4&f=h
  1.3.4.2.2.1     +4 -2      
jahia/src/java/org/jahia/services/search/RemovedField.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/RemovedField.java.diff?r1=1.3.4.2&r2=1.3.4.2.2.1&f=h
  1.1.2.8         +1 -0      
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.7&r2=1.1.2.8&f=h
  1.17.2.1.2.5    +4 -1      
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.2.4&r2=1.17.2.1.2.5&f=h
  1.1.2.2         +4 -4      
jahia/src/java/org/jahia/services/search/SiteIndexationStatus.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/SiteIndexationStatus.java.diff?r1=1.1.2.1&r2=1.1.2.2&f=h
  
  
  
  Index: AddedField.java
  ===================================================================
  RCS file: 
/cvs/jahia/src/java/org/jahia/services/search/Attic/AddedField.java,v
  retrieving revision 1.14.2.8.2.7
  retrieving revision 1.14.2.8.2.8
  diff -u -r1.14.2.8.2.7 -r1.14.2.8.2.8
  --- AddedField.java   24 May 2005 18:13:40 -0000      1.14.2.8.2.7
  +++ AddedField.java   8 Jun 2005 20:53:45 -0000       1.14.2.8.2.8
  @@ -48,10 +48,11 @@
        * @param key
        * @param fields
        */
  +    /*
       public AddedField (int siteId, String key,
                                          Hashtable fields) {
           super (siteId, null, key, fields);
  -    }
  +    }*/
   
       /**
        * A Field instance to store in the search index
  
  
  
  Index: JahiaSearchBaseService.java
  ===================================================================
  RCS file: 
/cvs/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchBaseService.java,v
  retrieving revision 1.42.2.15.2.19
  retrieving revision 1.42.2.15.2.20
  diff -u -r1.42.2.15.2.19 -r1.42.2.15.2.20
  --- JahiaSearchBaseService.java       3 Jun 2005 16:54:46 -0000       
1.42.2.15.2.19
  +++ JahiaSearchBaseService.java       8 Jun 2005 20:53:45 -0000       
1.42.2.15.2.20
  @@ -271,7 +271,7 @@
               System.setProperty("org.apache.lucene.minMergeDocs", 
String.valueOf(1000));
           }
   
  -        val =  
searchSettings.getProperty("org.jahia.services.search.scheduledJobInterval");
  +        val =  searchSettings.getProperty("scheduledJobInterval");
           if ( val != null ){
               try {
                   this.scheduledIndexationInterval = Long.parseLong(val);
  @@ -1006,7 +1006,8 @@
           boolean result = false;
   
           try {
  -            String indexDirectory = this.getSiteIndex(siteID);
  +            JahiaSite site = 
ServicesRegistry.getInstance().getJahiaSitesService().getSite(siteID);
  +            String indexDirectory = composeSiteIndexDir (site);
               if ( !IndexReader.indexExists(indexDirectory) ){
                   writer = getIndexWriter (siteID, this.indexAnalyzer, true);
               } else {
  @@ -1077,19 +1078,60 @@
           if ( this.isInitialized() && this.localIndexing ){
               this.optimizeAllIndexes();
           }
  -        
  +
           SiteIndexer siteIndexer = null;
           Integer siteId = null;
           HashMap siteIndexers = new HashMap();
           long lastOptimizationTime = System.currentTimeMillis();
  +        Vector v = null;
  +        Vector validDocs = null;
  +        JahiaIndexableDocument doc = null;
  +        JahiaIndexableDocument doc2 = null;
  +        Iterator iterator = null;
  +        RemovedField remField = null;
  +        AddedField addField = null;
  +        long now = 0;
           while (this.isInitialized() && indexingThreadActivated) {
  -            Vector v = new Vector();
  +            now = System.currentTimeMillis();
  +            v = new Vector();
  +            doc = null;
   
  -            HashMap toBeAdded = new HashMap();
  -            HashMap toBeRemoved = new HashMap();
  -            JahiaIndexableDocument doc = null;
               synchronized (this) {
  +                for ( int i=0; i<indexOrders.size(); i++ ){
  +                    doc = (JahiaIndexableDocument)indexOrders.get(i);
  +                    if ( 
doc.scheduled((IndexationJobDetail)this.scheduledIndexationJob) ){
  +                        continue;
  +                    }
  +                    if ( doc instanceof RemovedField ) {
  +                        remField = (RemovedField)doc;
  +                        for ( int j=0; j<v.size() ; j++ ){
  +                            doc2 = (JahiaIndexableDocument)v.get(j);
  +                            if ( doc2 != null && doc2 instanceof AddedField 
){
  +                                addField = (AddedField)doc2;
  +                                if ( remField.getID() == addField.getID() ){
  +                                    // we are going to remove the same 
field, so we don't need to add it at all.
  +                                    v.setElementAt(null,j);
  +                                }
  +                            }
  +                        }
  +                        // process remove first
  +                        v.insertElementAt(doc,0);
  +                    } else {
  +                        // process add at last
  +                        v.add(doc);
  +                    }
  +                }
   
  +                validDocs = new Vector();
  +                for ( int i=0; i<v.size() ; i++ ){
  +                    doc = (JahiaIndexableDocument)v.get(i);
  +                    if ( doc != null){
  +                        validDocs.add(doc);
  +                    }
  +                }
  +                v = null;
  +
  +                /*
                   // 1.Separate docs that are going to be added or removed
                   for ( int i=0; i<indexOrders.size(); i++ ){
                       doc = (JahiaIndexableDocument)indexOrders.get(i);
  @@ -1105,10 +1147,10 @@
                   }
   
                   // 2. remove "to added" docs, if they are going to be removed
  -                Iterator iterator = toBeRemoved.keySet().iterator();
  -                String key = null;
  -                Integer addOrder = null;
  -                Integer removeOrder = null;
  +                iterator = toBeRemoved.keySet().iterator();
  +                key = null;
  +                addOrder = null;
  +                removeOrder = null;
                   while ( iterator.hasNext() ){
                       key = (String)iterator.next();
                       addOrder = (Integer)toBeAdded.get(key);
  @@ -1121,30 +1163,31 @@
                           }
                       }
                   }
  +                */
   
                   indexOrders = new Vector();
               }
   
               long indexingStartTime = System.currentTimeMillis();
  -            int indexOrderCount = v.size ();
  +            int indexOrderCount = validDocs.size ();
   
  -            while (v.size() > 0) {
  -                JahiaIndexableDocument nextObject = null;
  -                if (v.size() != 0) {
  -                    nextObject = (JahiaIndexableDocument)
  -                        v.elementAt(0);
  -                    v.remove(0);
  +            while (validDocs.size() > 0) {
  +                doc = null;
  +                if (validDocs.size() != 0) {
  +                    doc = (JahiaIndexableDocument)
  +                        validDocs.elementAt(0);
  +                    validDocs.remove(0);
                   }
   
                   // okay now we have the next added/removed field, we process 
it!
  -                if (nextObject != null) {
  +                if (doc != null) {
   
  -                    siteId = new Integer(nextObject.getSiteId());
  +                    siteId = new Integer(doc.getSiteId());
   
                       siteIndexer = (SiteIndexer)siteIndexers.get(siteId);
                       try {
                           if ( siteIndexer == null ){
  -                            siteIndexer = new 
SiteIndexer(siteId.intValue(),1000);
  +                            siteIndexer = new 
SiteIndexer(siteId.intValue(),500);
                               siteIndexers.put(siteId,siteIndexer);
                           }
                       } catch ( Throwable t ){
  @@ -1152,18 +1195,17 @@
                       }
                       if ( siteIndexer != null ) {
                           try {
  -                            siteIndexer.addDocument(nextObject);
  +                            siteIndexer.addDocument(doc);
                           } catch ( Throwable t ){
                               logger.debug("Error addind document to 
SiteIndexer siteId="
                                       + siteId.intValue(), t);
                           }
                       }
  -                    this.indexOrdersCache.remove(getCacheKey(nextObject));
  +                    this.indexOrdersCache.remove(getCacheKey(doc));
                   }
               }
   
  -            long now = System.currentTimeMillis();
  -            Iterator iterator = siteIndexers.values().iterator();
  +            iterator = siteIndexers.values().iterator();
               while (iterator.hasNext()) {
                   siteIndexer = (SiteIndexer) iterator.next();
                   try {
  @@ -1176,7 +1218,7 @@
               }
   
               long indexingElapsedTime = now - indexingStartTime;
  -            if (logger.isInfoEnabled()) {
  +            if (logger.isInfoEnabled() && indexOrderCount>0 ) {
                   logger.info(
                       "Finished processing " + indexOrderCount +
                       " indexing orders in " + indexingElapsedTime + "ms.");
  @@ -1189,8 +1231,8 @@
   
               // FIXME : oops, As we are in a separate thread, this would may 
have sence
               // to terminate Connection ?
  -            org.jahia.services.database.ConnectionDispenser.
  -                    terminateConnection ();
  +            //org.jahia.services.database.ConnectionDispenser.
  +            //        terminateConnection ();
   
               int size = 0;
               synchronized (this) {
  @@ -1355,7 +1397,7 @@
           doc.add (Field.Keyword (indObj.getKeyFieldName (),
                   indObj.getKey ()));
           doc.add(Field.UnStored(JahiaSearchConstant.FIELD_TEXT, 
freeText.toString()));
  -        
  +
           return doc;
       }
   
  @@ -1439,6 +1481,7 @@
                   String.valueOf (indObj.getKey ()));
   
           removeDoc (indObj.getSiteId (), term, reader);
  +        //this.ramIndexer.removeDoc(term,indObj.getSiteId());
       }
   
       
//--------------------------------------------------------------------------
  @@ -1827,6 +1870,24 @@
                       closeIndexReader(reader);
                   }
   
  +                RAMDirectory ramDir = new RAMDirectory();
  +                IndexWriter ramWriter = new 
IndexWriter(ramDir,indexAnalyzer,true);
  +                ramWriter.mergeFactor = 50;
  +                ramWriter.minMergeDocs = 1000;
  +                luceneDoc = null;
  +                size = luceneDocs.size();
  +                for ( int i=0; i<size; i++ ){
  +                    luceneDoc = (Document)luceneDocs.get(i);
  +                    if (luceneDoc != null){
  +                        ramWriter.addDocument(luceneDoc);
  +                    }
  +                }
  +
  +                luceneDocs = null;
  +                docs = null;
  +
  +                ramWriter.close();
  +
                   IndexWriter fsWriter = null;
                   try {
                       fsWriter = getIndexWriter(siteId,indexAnalyzer,false);
  @@ -1843,6 +1904,7 @@
                                   fsWriter.mergeFactor = 30;
                               }
                           }
  +                        /*
                           luceneDoc = null;
                           size = luceneDocs.size();
                           for ( int i=0; i<size; i++ ){
  @@ -1850,12 +1912,16 @@
                               if (luceneDoc != null){
                                   fsWriter.addDocument(luceneDoc);
                               }
  -                        }
  +                        }*/
  +                        fsWriter.addIndexes(new Directory[]{ramDir});
                       }
                   } catch ( Throwable t ) {
                       logger.debug("Error adding doc from index", t);
                   } finally {
                       closeIndexWriter(fsWriter);
  +                    ramDir = null;
  +                    ramWriter = null;
  +                    fsWriter = null;
                   }
               } else if ( this.getLastOperation() == REMOVE ) {
                   IndexReader reader = getIndexReader(siteId);
  @@ -1867,6 +1933,7 @@
                       doc = null;
                   }
                   closeIndexReader(reader);
  +                reader = null;
               }
               this.docs = new Vector();
               this.setLastOperation(UNDEFINED);
  
  
  
  Index: RAMIndexer.java
  ===================================================================
  RCS file: 
/cvs/jahia/src/java/org/jahia/services/search/Attic/RAMIndexer.java,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- RAMIndexer.java   3 Jun 2005 10:29:20 -0000       1.1.2.3
  +++ RAMIndexer.java   8 Jun 2005 20:53:45 -0000       1.1.2.4
  @@ -39,7 +39,7 @@
       public void run(){
           while ( !killed ){
               try {
  -                Thread.sleep(60000);
  +                Thread.sleep(30000);
                   long now = System.currentTimeMillis();
                   synchronized(this){
                       Iterator iterator = docs.keySet().iterator();
  @@ -47,14 +47,16 @@
                       Vector v = null;
                       while ( iterator.hasNext() ){
                           I = (Integer)iterator.next();
  +                        this.closeIndexWriter(I.intValue());
                           v = (Vector)docs.get(I);
                           int size = v.size();
                           TempDocument doc = null;
                           Vector newV = new Vector();
                           for ( int i=0; i<size; i++ ){
                               doc = (TempDocument)v.get(i);
  -                            if ( (now-doc.getCreationDate())<60000){
  +                            if ( (now-doc.getCreationDate())<30000){
                                   newV.add(doc);
  +                                this.addDoc(doc.getDoc(),I.intValue());
                               }
                           }
                           docs.put(I,newV);
  @@ -79,6 +81,33 @@
           thread.start();
       }
   
  +    public synchronized void removeDoc(Term term, int siteId)
  +    {
  +        Directory dir = (Directory)this.ramDirs.get(new Integer(siteId));
  +        if ( dir != null ){
  +            try {
  +                IndexWriter writer = (IndexWriter)this.indexes.get(new 
Integer(siteId));
  +                if ( writer != null ){
  +                    try {
  +                        writer.close();
  +                    } catch ( Throwable t){
  +                    }
  +                }
  +                try {
  +                    IndexReader reader = IndexReader.open(dir);
  +                    reader.delete(term);
  +                    writer = new IndexWriter(dir, analyzer, false);
  +                } catch ( Throwable t ){
  +                }
  +                if ( writer != null ){
  +                    this.indexes.put(new Integer(siteId),writer);
  +                }
  +            } catch ( Throwable t){
  +                logger.debug("Exception removing term from RAMIndexer",t);
  +            }
  +        }
  +    }
  +
       public synchronized void addDoc(Document doc, int siteId){
           if ( this.killed || doc == null ){
               return;
  @@ -88,8 +117,9 @@
           docCount = writer.docCount();
           if ( docCount > maxDoc ){
               try {
  +                closeIndexWriter(siteId);
                   Directory newDir = new RAMDirectory();
  -                writer = new IndexWriter(new RAMDirectory(),analyzer,true);
  +                writer = new IndexWriter(newDir,analyzer,true);
                   writer.minMergeDocs = 1000;
                   writer.mergeFactor = 50;
                   writer.setUseCompoundFile(false);
  @@ -97,6 +127,8 @@
                   for ( int i=0; i<50; i++ ){
                       if ( v.size() > 50 ){
                           v.remove(0);
  +                    } else {
  +                        break;
                       }
                   }
                   int size = v.size();
  @@ -120,14 +152,18 @@
               TempDocument tempDoc = new TempDocument(doc);
               v.add(tempDoc);
               writer.addDocument(doc);
  -            writer.close();
  -
  +            try {
  +                writer.close();
  +            } catch ( Throwable t) {
  +            }
               RAMDirectory oldDirectory = (RAMDirectory)this.ramDirs.get(new 
Integer(siteId));
  -            writer = new IndexWriter(oldDirectory,analyzer,false);
  -            writer.mergeFactor = 50;
  -            writer.minMergeDocs = 1000;
  -            writer.setUseCompoundFile(false);
  -            this.indexes.put(new Integer(siteId),writer);
  +            try {
  +                writer = new IndexWriter(oldDirectory, analyzer, false);
  +            } catch ( Throwable t ){
  +            }
  +            if ( writer != null ){
  +                this.indexes.put(new Integer(siteId),writer);
  +            }
   
           } catch ( Throwable t) {
               logger.debug("Exception adding doc to RAMIndexer",t);
  @@ -147,23 +183,26 @@
       }
   
       private IndexWriter getIndexWriter(int siteId){
  -        synchronized(this.indexes){
  -            IndexWriter writer = (IndexWriter) this.indexes.get(new 
Integer(siteId));
  -            if ( writer == null ) {
  -                RAMDirectory ramDir = new RAMDirectory();
  -                try {
  -                    writer = new IndexWriter(ramDir,analyzer,true);
  -                    writer.minMergeDocs = 1000;
  -                    writer.mergeFactor = 50;
  -                    writer.setUseCompoundFile(false);
  -                    this.indexes.put(new Integer(siteId),writer);
  -                    this.ramDirs.put(new Integer(siteId),ramDir);
  -                } catch ( Throwable t) {
  -                    logger.debug("Exception creatring IndexWriter for 
RAMIndexer",t);
  -                }
  +        IndexWriter writer = (IndexWriter) this.indexes.get(new 
Integer(siteId));
  +        if ( writer == null ) {
  +            RAMDirectory ramDir = new RAMDirectory();
  +            try {
  +                writer = new IndexWriter(ramDir,analyzer,true);
  +                writer.minMergeDocs = 1000;
  +                writer.mergeFactor = 50;
  +                writer.setUseCompoundFile(false);
  +                this.indexes.put(new Integer(siteId),writer);
  +                this.ramDirs.put(new Integer(siteId),ramDir);
  +            } catch ( Throwable t) {
  +                logger.debug("Exception creatring IndexWriter for 
RAMIndexer",t);
               }
  -            return writer;
           }
  +        return writer;
  +    }
  +
  +    private void closeIndexWriter(int siteId){
  +        this.indexes.remove(new Integer(siteId));
  +        this.ramDirs.remove(new Integer(siteId));
       }
   
       public void shutDown(){
  
  
  
  Index: RemovedField.java
  ===================================================================
  RCS file: 
/cvs/jahia/src/java/org/jahia/services/search/Attic/RemovedField.java,v
  retrieving revision 1.3.4.2
  retrieving revision 1.3.4.2.2.1
  diff -u -r1.3.4.2 -r1.3.4.2.2.1
  --- RemovedField.java 26 Aug 2004 16:29:41 -0000      1.3.4.2
  +++ RemovedField.java 8 Jun 2005 20:53:45 -0000       1.3.4.2.2.1
  @@ -21,19 +21,21 @@
        * @param key
        * @param fields
        */
  +    /*
       public  RemovedField (int siteId, String keyFieldName,
                                          String key, Hashtable fields) {
            super (siteId, keyFieldName, key, fields);
  -    }
  +    }*/
   
       /**
        * @param siteId
        * @param key
        * @param fields
        */
  +    /*
       public RemovedField (int siteId, String key, Hashtable fields) {
           super (siteId, null, key, fields);
  -    }
  +    }*/
   
       public RemovedField (JahiaField theField) {
   
  
  
  
  Index: ScheduledSiteIndexationJob.java
  ===================================================================
  RCS file: 
/cvs/jahia/src/java/org/jahia/services/search/Attic/ScheduledSiteIndexationJob.java,v
  retrieving revision 1.1.2.7
  retrieving revision 1.1.2.8
  diff -u -r1.1.2.7 -r1.1.2.8
  --- ScheduledSiteIndexationJob.java   3 Jun 2005 10:29:20 -0000       1.1.2.7
  +++ ScheduledSiteIndexationJob.java   8 Jun 2005 20:53:45 -0000       1.1.2.8
  @@ -82,6 +82,7 @@
           JahiaField aField;
           int size = listFieldID.size();
           status.setNbDocsToIndex(size);
  +        status.setNbIndexedDocs(0);
           boolean success = true;
           for (int i = 0; i < size; i++) {
               if ( status.isShutdown() ){
  
  
  
  Index: SearchEngine.java
  ===================================================================
  RCS file: 
/cvs/jahia/src/java/org/jahia/services/search/Attic/SearchEngine.java,v
  retrieving revision 1.17.2.1.2.4
  retrieving revision 1.17.2.1.2.5
  diff -u -r1.17.2.1.2.4 -r1.17.2.1.2.5
  --- SearchEngine.java 3 Jun 2005 16:54:46 -0000       1.17.2.1.2.4
  +++ SearchEngine.java 8 Jun 2005 20:53:45 -0000       1.17.2.1.2.5
  @@ -113,7 +113,10 @@
               if ( multiSearcher != null ){
                   hits = multiSearcher.search(query);
               }
  -
  +            try {
  +                multiSearcher.close();
  +            } catch (Throwable t){
  +            }
               Vector parsedObjects = getParsedObjects(hits);
               if ( parsedObjects == null ){
                   parsedObjects = new Vector();
  
  
  
  Index: SiteIndexationStatus.java
  ===================================================================
  RCS file: 
/cvs/jahia/src/java/org/jahia/services/search/Attic/SiteIndexationStatus.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- SiteIndexationStatus.java 3 Jun 2005 10:29:20 -0000       1.1.2.1
  +++ SiteIndexationStatus.java 8 Jun 2005 20:53:45 -0000       1.1.2.2
  @@ -95,19 +95,19 @@
           }
       }
   
  -    public int getNbDocsToIndex() {
  +    public synchronized int getNbDocsToIndex() {
           return nbDocsToIndex;
       }
   
  -    public void setNbDocsToIndex(int nbDocsToIndex) {
  +    public synchronized void setNbDocsToIndex(int nbDocsToIndex) {
           this.nbDocsToIndex = nbDocsToIndex;
       }
   
  -    public int getNbIndexedDocs() {
  +    public synchronized int getNbIndexedDocs() {
           return nbIndexedDocs;
       }
   
  -    public void setNbIndexedDocs(int nbIndexedDocs) {
  +    public synchronized void setNbIndexedDocs(int nbIndexedDocs) {
           this.nbIndexedDocs = nbIndexedDocs;
       }
   
  

Reply via email to