From d568a1e9fd63c97eb86cd84a51bb6770747ec37c Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Sat, 17 Jan 2009 00:52:50 +0000 Subject: Implement relevance ranked boolean searching on a full text index of item and comment data. Whew! It's not pretty yet. And you have to manually update the index currently in admin/maintenance. But it works. --- modules/search/helpers/search_task.php | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 modules/search/helpers/search_task.php (limited to 'modules/search/helpers/search_task.php') diff --git a/modules/search/helpers/search_task.php b/modules/search/helpers/search_task.php new file mode 100644 index 00000000..5291a27b --- /dev/null +++ b/modules/search/helpers/search_task.php @@ -0,0 +1,61 @@ + +callback("search_task::update_index") + ->name(t("Update Search Index")) + ->description($remaining ? + t("Search index is %percent% up-to-date", + array("percent" => $percent)) + : t("Search index is up to date")) + ->severity($remaining ? log::WARNING : log::SUCCESS)); + } + + static function update_index($task) { + $completed = $task->get("completed", 0); + foreach (ORM::factory("search_record")->where("dirty", 1)->limit(2)->find_all() as $record) { + search::update_record($record); + $completed++; + } + $task->set("completed", $completed); + + list ($remaining, $total, $percent) = self::_get_stats(); + $task->percent_complete = round(100 * $completed / ($remaining + $completed)); + + $task->status = t("%done records records updated, index is %percent% up-to-date", + array("done" => $completed, "percent" => $percent)); + + if ($remaining == 0) { + $task->done = true; + $task->state = "success"; + site_status::clear("search_index_out_of_date"); + } + } + + private static function _get_stats() { + $remaining = ORM::factory("search_record")->where("dirty", 1)->count_all(); + $total = ORM::factory("search_record")->count_all(); + $percent = round(100 * ($total - $remaining) / $total); + return array($remaining, $total, $percent); + } +} -- cgit v1.2.3