[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Periodic off-peak updating of the search index. 4 * 5 * Usage: php updateSearchIndex.php [-s START] [-e END] [-p POSFILE] [-l LOCKTIME] [-q] 6 * Where START is the starting timestamp 7 * END is the ending timestamp 8 * POSFILE is a file to load timestamps from and save them to, searchUpdate.WIKI_ID.pos by default 9 * LOCKTIME is how long the searchindex and revision tables will be locked for 10 * -q means quiet 11 * 12 * This program is free software; you can redistribute it and/or modify 13 * it under the terms of the GNU General Public License as published by 14 * the Free Software Foundation; either version 2 of the License, or 15 * (at your option) any later version. 16 * 17 * This program is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 * GNU General Public License for more details. 21 * 22 * You should have received a copy of the GNU General Public License along 23 * with this program; if not, write to the Free Software Foundation, Inc., 24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 25 * http://www.gnu.org/copyleft/gpl.html 26 * 27 * @file 28 * @ingroup Maintenance 29 */ 30 31 require_once __DIR__ . '/Maintenance.php'; 32 33 /** 34 * Maintenance script for periodic off-peak updating of the search index. 35 * 36 * @ingroup Maintenance 37 */ 38 class UpdateSearchIndex extends Maintenance { 39 40 public function __construct() { 41 parent::__construct(); 42 $this->mDescription = "Script for periodic off-peak updating of the search index"; 43 $this->addOption( 's', 'starting timestamp', false, true ); 44 $this->addOption( 'e', 'Ending timestamp', false, true ); 45 $this->addOption( 46 'p', 47 'File for saving/loading timestamps, searchUpdate.WIKI_ID.pos by default', 48 false, 49 true 50 ); 51 $this->addOption( 52 'l', 53 'How long the searchindex and revision tables will be locked for', 54 false, 55 true 56 ); 57 } 58 59 public function getDbType() { 60 return Maintenance::DB_ADMIN; 61 } 62 63 public function execute() { 64 $posFile = $this->getOption( 'p', 'searchUpdate.' . wfWikiId() . '.pos' ); 65 $end = $this->getOption( 'e', wfTimestampNow() ); 66 if ( $this->hasOption( 's' ) ) { 67 $start = $this->getOption( 's' ); 68 } elseif ( is_readable( 'searchUpdate.pos' ) ) { 69 # B/c to the old position file name which was hardcoded 70 # We can safely delete the file when we're done though. 71 $start = file_get_contents( 'searchUpdate.pos' ); 72 unlink( 'searchUpdate.pos' ); 73 } elseif ( is_readable( $posFile ) ) { 74 $start = file_get_contents( $posFile ); 75 } else { 76 $start = wfTimestamp( TS_MW, time() - 86400 ); 77 } 78 $lockTime = $this->getOption( 'l', 20 ); 79 80 $this->doUpdateSearchIndex( $start, $end, $lockTime ); 81 if ( is_writable( dirname( realpath( $posFile ) ) ) ) { 82 $file = fopen( $posFile, 'w' ); 83 if ( $file !== false ) { 84 fwrite( $file, $end ); 85 fclose( $file ); 86 } else { 87 $this->error( "*** Couldn't write to the $posFile!\n" ); 88 } 89 } else { 90 $this->error( "*** Couldn't write to the $posFile!\n" ); 91 } 92 } 93 94 private function doUpdateSearchIndex( $start, $end, $maxLockTime ) { 95 global $wgDisableSearchUpdate; 96 97 $wgDisableSearchUpdate = false; 98 99 $dbw = wfGetDB( DB_MASTER ); 100 $recentchanges = $dbw->tableName( 'recentchanges' ); 101 102 $this->output( "Updating searchindex between $start and $end\n" ); 103 104 # Select entries from recentchanges which are on top and between the specified times 105 $start = $dbw->timestamp( $start ); 106 $end = $dbw->timestamp( $end ); 107 108 $page = $dbw->tableName( 'page' ); 109 $sql = "SELECT rc_cur_id FROM $recentchanges 110 JOIN $page ON rc_cur_id=page_id AND rc_this_oldid=page_latest 111 WHERE rc_type != " . RC_LOG . " AND rc_timestamp BETWEEN '$start' AND '$end'"; 112 $res = $dbw->query( $sql, __METHOD__ ); 113 114 $this->updateSearchIndex( $maxLockTime, array( $this, 'searchIndexUpdateCallback' ), $dbw, $res ); 115 116 $this->output( "Done\n" ); 117 } 118 119 public function searchIndexUpdateCallback( $dbw, $row ) { 120 $this->updateSearchIndexForPage( $dbw, $row->rc_cur_id ); 121 } 122 } 123 124 $maintClass = "UpdateSearchIndex"; 125 require_once RUN_MAINTENANCE_IF_MAIN;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |