1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * CLI search indexer 19 * 20 * @package search 21 * @copyright 2016 Dan Poltawski <dan@moodle.com> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 define('CLI_SCRIPT', true); 26 27 require(__DIR__.'/../../config.php'); 28 require_once($CFG->libdir.'/clilib.php'); // cli only functions 29 30 list($options, $unrecognized) = cli_get_params(array('help' => false, 'force' => false, 31 'reindex' => false, 'timelimit' => 0), 32 array('h' => 'help', 'f' => 'force', 'r' => 'reindex', 't' => 'timelimit')); 33 34 if ($unrecognized) { 35 $unrecognized = implode("\n ", $unrecognized); 36 cli_error(get_string('cliunknowoption', 'admin', $unrecognized)); 37 } 38 39 if ($options['help']) { 40 $help = 41 "Index search data 42 43 Options: 44 -h, --help Print out this help 45 -r, --reindex Reindex data 46 -f, --force Allow indexer to run, even if global search is disabled. 47 -t=<n>, --timelimit=<n> Stop after indexing for specified time (in seconds) 48 49 Examples: 50 \$ sudo -u www-data /usr/bin/php search/cli/indexer.php --reindex 51 \$ sudo -u www-data /usr/bin/php search/cli/indexer.php --timelimit=300 52 "; 53 54 echo $help; 55 die; 56 } 57 58 if ($options['timelimit'] && $options['reindex']) { 59 cli_error('Cannot apply time limit when reindexing'); 60 } 61 62 if (!\core_search\manager::is_global_search_enabled() && empty($options['force'])) { 63 cli_error('Global search is disabled. Use --force if you want to force an index while disabled'); 64 } 65 66 if (!$searchengine = \core_search\manager::search_engine_instance()) { 67 cli_error(get_string('engineserverstatus', 'search')); 68 } 69 if (!$searchengine->is_installed()) { 70 cli_error('enginenotinstalled', 'search', $CFG->searchengine); 71 } 72 $serverstatus = $searchengine->is_server_ready(); 73 if ($serverstatus !== true) { 74 cli_error($serverstatus); 75 } 76 77 $globalsearch = \core_search\manager::instance(); 78 79 if (empty($options['reindex'])) { 80 if ($options['timelimit']) { 81 $limitinfo = ' (max ' . $options['timelimit'] . ' seconds)'; 82 $limitunderline = preg_replace('~.~', '=', $limitinfo); 83 echo "Running index of site$limitinfo\n"; 84 echo "=====================$limitunderline\n"; 85 $timelimit = (int)$options['timelimit']; 86 } else { 87 echo "Running full index of site\n"; 88 echo "==========================\n"; 89 $timelimit = 0; 90 } 91 $before = time(); 92 $globalsearch->index(false, $timelimit, new text_progress_trace()); 93 94 // Do specific index requests with the remaining time. 95 if ($timelimit) { 96 $timelimit -= (time() - $before); 97 // Only do index requests if there is a reasonable amount of time left. 98 if ($timelimit > 1) { 99 $globalsearch->process_index_requests($timelimit, new text_progress_trace()); 100 } 101 } else { 102 $globalsearch->process_index_requests(0, new text_progress_trace()); 103 } 104 105 } else { 106 echo "Running full reindex of site\n"; 107 echo "============================\n"; 108 $globalsearch->index(true, 0, new text_progress_trace()); 109 } 110 111 // Optimize index at last. 112 $globalsearch->optimize_index();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body