diff options
| author | Bharat Mediratta <bharat@menalto.com> | 2009-01-17 00:52:50 +0000 |
|---|---|---|
| committer | Bharat Mediratta <bharat@menalto.com> | 2009-01-17 00:52:50 +0000 |
| commit | d568a1e9fd63c97eb86cd84a51bb6770747ec37c (patch) | |
| tree | 2b382bce985bce886c69d6d58377c5ce71a0cdc6 /modules/search/helpers/search_task.php | |
| parent | 91be7a38f883cd008d370f81ff68949de68eafbf (diff) | |
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.
Diffstat (limited to 'modules/search/helpers/search_task.php')
| -rw-r--r-- | modules/search/helpers/search_task.php | 61 |
1 files changed, 61 insertions, 0 deletions
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 @@ + +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2008 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class search_task_Core { + static function available_tasks() { + list ($remaining, $total, $percent) = self::_get_stats(); + return array(Task_Definition::factory() + ->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); + } +} |
