You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ry...@apache.org on 2007/07/10 13:57:37 UTC

svn commit: r554915 - /lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java

Author: ryan
Date: Tue Jul 10 04:57:36 2007
New Revision: 554915

URL: http://svn.apache.org/viewvc?view=rev&rev=554915
Log:
SOLR-296  -- wrapping reader.terms() in try/catch 

Modified:
    lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java

Modified: lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java?view=diff&rev=554915&r1=554914&r2=554915
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java Tue Jul 10 04:57:36 2007
@@ -71,7 +71,6 @@
  * For more documentation see:
  *  http://wiki.apache.org/solr/LukeRequestHandler
  * 
- * @author ryan
  * @version $Id$
  * @since solr 1.2
  */
@@ -390,12 +389,18 @@
     indexInfo.add("maxDoc", reader.maxDoc());
     
     if( countTerms ) {
-      TermEnum te = reader.terms();
-      int numTerms = 0;
-      while (te.next()) {
-        numTerms++;
+      TermEnum te = null;
+      try{
+        te = reader.terms();
+        int numTerms = 0;
+        while (te.next()) {
+          numTerms++;
+        }
+        indexInfo.add("numTerms", numTerms );
+      }
+      finally{
+        if( te != null ) te.close();
       }
-      indexInfo.add("numTerms", numTerms );
     }
 
     indexInfo.add("version", reader.getVersion());  // TODO? Is this different then: IndexReader.getCurrentVersion( dir )?
@@ -538,38 +543,44 @@
   private static Map<String,TopTermQueue> getTopTerms( IndexReader reader, Set<String> fields, int numTerms, Set<String> junkWords ) throws Exception 
   {
     Map<String,TopTermQueue> info = new HashMap<String, TopTermQueue>();
-    TermEnum terms = reader.terms();
     
-    while (terms.next()) {
-      String field = terms.term().field();
-      String t = terms.term().text();
-
-      // Compute distinct terms for every field
-      TopTermQueue tiq = info.get( field );
-      if( tiq == null ) {
-        tiq = new TopTermQueue( numTerms );
-        info.put( field, tiq );
-      }
-      tiq.distinctTerms++;
-      tiq.histogram.add( terms.docFreq() );  // add the term to the histogram
-      
-      // Only save the distinct terms for fields we worry about
-      if (fields != null && fields.size() > 0) {
-        if( !fields.contains( field ) ) {
+    TermEnum terms = null;
+    try{
+      terms = reader.terms();    
+      while (terms.next()) {
+        String field = terms.term().field();
+        String t = terms.term().text();
+  
+        // Compute distinct terms for every field
+        TopTermQueue tiq = info.get( field );
+        if( tiq == null ) {
+          tiq = new TopTermQueue( numTerms+1 );
+          info.put( field, tiq );
+        }
+        tiq.distinctTerms++;
+        tiq.histogram.add( terms.docFreq() );  // add the term to the histogram
+        
+        // Only save the distinct terms for fields we worry about
+        if (fields != null && fields.size() > 0) {
+          if( !fields.contains( field ) ) {
+            continue;
+          }
+        }
+        if( junkWords != null && junkWords.contains( t ) ) {
           continue;
         }
-      }
-      if( junkWords != null && junkWords.contains( t ) ) {
-        continue;
-      }
-      
-      if( terms.docFreq() > tiq.minFreq ) {
-        tiq.put(new TopTermQueue.TermInfo(terms.term(), terms.docFreq()));
-        if (tiq.size() >= numTerms) { // if tiq full
-          tiq.pop(); // remove lowest in tiq
-          tiq.minFreq = ((TopTermQueue.TermInfo)tiq.top()).docFreq; // reset minFreq
+        
+        if( terms.docFreq() > tiq.minFreq ) {
+          tiq.put(new TopTermQueue.TermInfo(terms.term(), terms.docFreq()));
+            if (tiq.size() > numTerms) { // if tiq full
+            tiq.pop(); // remove lowest in tiq
+            tiq.minFreq = ((TopTermQueue.TermInfo)tiq.top()).docFreq; // reset minFreq
+          }
         }
       }
+    }
+    finally {
+      if( terms != null ) terms.close();
     }
     return info;
   }