Index: search.module
===================================================================
--- search.module	(revision 3593)
+++ search.module	(working copy)
@@ -233,6 +233,10 @@
   }
   else {
     db_query("DELETE FROM {search_dataset} WHERE sid = %d AND type = '%s'", $sid, $type);
+    $result = db_query("SELECT word FROM {search_index} WHERE sid = %d AND type = '%s'", $sid, $type);
+    while ($row = db_fetch_object($result)) {
+      search_dirty($row->word);
+    }
     db_query("DELETE FROM {search_index} WHERE sid = %d AND type = '%s'", $sid, $type);
     // Don't remove links if re-indexing.
     if (!$reindex) {
@@ -282,19 +286,17 @@
   foreach (search_dirty() as $word => $dummy) {
     // Get total count
     $total = db_result(db_query("SELECT SUM(score) FROM {search_index} WHERE word = '%s'", $word));
-    // Apply Zipf's law to equalize the probability distribution
-    $total = log10(1 + 1/(max(1, $total)));
-    db_query("UPDATE {search_total} SET count = %f WHERE word = '%s'", $total, $word);
-    if (!db_affected_rows()) {
-      @db_query("INSERT INTO {search_total} (word, count) VALUES ('%s', %f)", $word, $total);
+    if (!$total) {
+      db_query("DELETE FROM {search_total} WHERE word = '%s'", $word);
     }
-  }
-  // Find words that were deleted from search_index, but are still in
-  // search_total. We use a LEFT JOIN between the two tables and keep only the
-  // rows which fail to join.
-  $result = db_query("SELECT t.word AS realword, i.word FROM {search_total} t LEFT JOIN {search_index} i ON t.word = i.word WHERE i.word IS NULL");
-  while ($word = db_fetch_object($result)) {
-    db_query("DELETE FROM {search_total} WHERE word = '%s'", $word->realword);
+    else {
+      // Apply Zipf's law to equalize the probability distribution
+      $total = log10(1 + 1/(max(1, $total)));
+      db_query("UPDATE {search_total} SET count = %f WHERE word = '%s'", $total, $word);
+      if (!db_affected_rows()) {
+        db_query("INSERT INTO {search_total} (word, count) VALUES ('%s', %f)", $word, $total);
+      }
+    }
   }
 }
 
