function search_update_totals in Drupal 5
Same name and namespace in other branches
- 8 core/modules/search/search.module \search_update_totals()
- 4 modules/search.module \search_update_totals()
- 6 modules/search/search.module \search_update_totals()
- 7 modules/search/search.module \search_update_totals()
This function is called on shutdown to ensure that search_total is always up to date (even if cron times out or otherwise fails).
1 string reference to 'search_update_totals'
- search_cron in modules/
search/ search.module - Implementation of hook_cron().
File
- modules/
search/ search.module, line 312 - Enables site-wide keyword searching.
Code
function search_update_totals() {
// Update word IDF (Inverse Document Frequency) counts for new/changed words
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);
}
}
// 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);
}
}