You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2010/02/22 18:28:27 UTC

svn commit: r912672 - /lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriter.java

Author: mikemccand
Date: Mon Feb 22 17:28:26 2010
New Revision: 912672

URL: http://svn.apache.org/viewvc?rev=912672&view=rev
Log:
LUCENE-2275: don't get TermDocs/IndexSearcher when applying deletes unless we actually have terms & queries to delete

Modified:
    lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriter.java

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriter.java?rev=912672&r1=912671&r2=912672&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriter.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriter.java Mon Feb 22 17:28:26 2010
@@ -986,25 +986,27 @@
     assert checkDeleteTerm(null);
 
     // Delete by term
-    TermDocs docs = reader.termDocs();
-    try {
-      for (Entry<Term, BufferedDeletes.Num> entry: deletesFlushed.terms.entrySet()) {
-        Term term = entry.getKey();
-        // LUCENE-2086: we should be iterating a TreeMap,
-        // here, so terms better be in order:
-        assert checkDeleteTerm(term);
-        docs.seek(term);
-        int limit = entry.getValue().getNum();
-        while (docs.next()) {
-          int docID = docs.doc();
-          if (docIDStart+docID >= limit)
-            break;
-          reader.deleteDocument(docID);
-          any = true;
+    if (deletesFlushed.terms.size() > 0) {
+      TermDocs docs = reader.termDocs();
+      try {
+        for (Entry<Term, BufferedDeletes.Num> entry: deletesFlushed.terms.entrySet()) {
+          Term term = entry.getKey();
+          // LUCENE-2086: we should be iterating a TreeMap,
+          // here, so terms better be in order:
+          assert checkDeleteTerm(term);
+          docs.seek(term);
+          int limit = entry.getValue().getNum();
+          while (docs.next()) {
+            int docID = docs.doc();
+            if (docIDStart+docID >= limit)
+              break;
+            reader.deleteDocument(docID);
+            any = true;
+          }
         }
+      } finally {
+        docs.close();
       }
-    } finally {
-      docs.close();
     }
 
     // Delete by docID
@@ -1017,23 +1019,28 @@
     }
 
     // Delete by query
-    IndexSearcher searcher = new IndexSearcher(reader);
-    for (Entry<Query, Integer> entry : deletesFlushed.queries.entrySet()) {
-      Query query = entry.getKey();
-      int limit = entry.getValue().intValue();
-      Weight weight = query.weight(searcher);
-      Scorer scorer = weight.scorer(reader, true, false);
-      if (scorer != null) {
-        while(true)  {
-          int doc = scorer.nextDoc();
-          if (((long) docIDStart) + doc >= limit)
-            break;
-          reader.deleteDocument(doc);
-          any = true;
+    if (deletesFlushed.queries.size() > 0) {
+      IndexSearcher searcher = new IndexSearcher(reader);
+      try {
+        for (Entry<Query, Integer> entry : deletesFlushed.queries.entrySet()) {
+          Query query = entry.getKey();
+          int limit = entry.getValue().intValue();
+          Weight weight = query.weight(searcher);
+          Scorer scorer = weight.scorer(reader, true, false);
+          if (scorer != null) {
+            while(true)  {
+              int doc = scorer.nextDoc();
+              if (((long) docIDStart) + doc >= limit)
+                break;
+              reader.deleteDocument(doc);
+              any = true;
+            }
+          }
         }
+      } finally {
+        searcher.close();
       }
     }
-    searcher.close();
     return any;
   }