MDL-63165 question: Bump expected size of question exports (take II)
[moodle.git] / search / cli / indexer.php
blob7129cfcc1a50c473fea7ec2a6e19457059ebe694
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.
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/>.
17 /**
18 * CLI search indexer
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
25 define('CLI_SCRIPT', true);
27 require(__DIR__.'/../../config.php');
28 require_once($CFG->libdir.'/clilib.php'); // cli only functions
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'));
34 if ($unrecognized) {
35 $unrecognized = implode("\n ", $unrecognized);
36 cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
39 if ($options['help']) {
40 $help =
41 "Index search data
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)
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
54 echo $help;
55 die;
58 if ($options['timelimit'] && $options['reindex']) {
59 cli_error('Cannot apply time limit when reindexing');
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');
66 if (!$searchengine = \core_search\manager::search_engine_instance()) {
67 cli_error(get_string('engineserverstatus', 'search'));
69 if (!$searchengine->is_installed()) {
70 cli_error('enginenotinstalled', 'search', $CFG->searchengine);
72 $serverstatus = $searchengine->is_server_ready();
73 if ($serverstatus !== true) {
74 cli_error($serverstatus);
77 $globalsearch = \core_search\manager::instance();
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;
91 $before = time();
92 $globalsearch->index(false, $timelimit, new text_progress_trace());
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());
101 } else {
102 $globalsearch->process_index_requests(0, new text_progress_trace());
105 } else {
106 echo "Running full reindex of site\n";
107 echo "============================\n";
108 $globalsearch->index(true, 0, new text_progress_trace());
111 // Optimize index at last.
112 $globalsearch->optimize_index();