Index: modules/search/search.module =================================================================== --- modules/search/search.module (revision 8987) +++ modules/search/search.module (working copy) @@ -268,6 +268,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 fromsid = %d AND fromtype = '%s'", $sid, $type); // When re-indexing, keep link references db_query("DELETE FROM {search_index} WHERE sid = %d AND type = '%s'". ($reindex ? " AND fromsid = 0" : ''), $sid, $type); @@ -315,20 +319,18 @@ 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); } + 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); + } + } } - // 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); - } } /**