fixed discussion namespace
[lhc/web/wiklou.git] / maintenance / rebuildtextindex.inc
index dacec07..beac559 100644 (file)
@@ -1,43 +1,67 @@
-<?
+<?php
+/**
+ * Rebuild the fulltext search indexes. This may take a while
+ * depending on the database size and server configuration.
+ *
+ * Rebuilding is faster if you drop the index and recreate it,
+ * but that will prevent searches from working while it runs.
+ *
+ * @todo document
+ * @package MediaWiki
+ * @subpackage Maintenance
+ */
 
-# Rebuild the fulltext search indexes. This may take a while
-# depending on the database size and server configuration.
+/** */
+define( "RTI_CHUNK_SIZE", 500 );
 
-# Rebuilding is faster if you drop the index and recreate it,
-# but that will prevent searches from working while it runs.
-
-function dropTextIndex()
+function dropTextIndex( &$database )
 {
-       echo "Dropping index...\n";
-       $sql = "ALTER TABLE searchindex DROP INDEX si_title, DROP INDEX si_text";
-       $res = wfQuery($sql, DB_WRITE, "dropTextIndex" );
+       $searchindex = $database->tableName( 'searchindex' );
+       if ( $database->indexExists( "searchindex", "si_title" ) ) {
+               echo "Dropping index...\n";
+               $sql = "ALTER TABLE $searchindex DROP INDEX si_title, DROP INDEX si_text";
+               $database->query($sql, "dropTextIndex" );
+       }
 }
 
-function createTextIndex()
+function createTextIndex( &$database )
 {
+       $searchindex = $database->tableName( 'searchindex' );
        echo "Rebuild the index...\n";
-       $sql = "ALTER TABLE searchindex ADD FULLTEXT si_title (si_title), " .
+       $sql = "ALTER TABLE $searchindex ADD FULLTEXT si_title (si_title), " .
          "ADD FULLTEXT si_text (si_text)";
-       $res = wfQuery($sql, DB_WRITE, "createTextIndex" );
+       $database->query($sql, "createTextIndex" );
 }
 
-function rebuildTextIndex()
+function rebuildTextIndex( &$database )
 {
-       $sql = "SELECT COUNT(*) AS count FROM cur";
-       $res = wfQuery($sql, DB_READ, "rebuildTextIndex" );
-       $s = wfFetchObject($res);
-       echo "Rebuilding index fields for {$s->count} pages...\n";
+       extract( $database->tableNames( 'page', 'revision', 'text', 'searchindex' ) );
+
+       $sql = "SELECT MAX(page_id) AS count FROM $page";
+       $res = $database->query($sql, "rebuildTextIndex" );
+       $s = $database->fetchObject($res);
+       $count = $s->count;
+       echo "Rebuilding index fields for {$count} pages...\n";
        $n = 0;
 
-       $sql = "SELECT cur_id, cur_namespace, cur_title, cur_text FROM cur";
-       $res = wfQuery($sql, DB_READ, "rebuildTextIndex" );
+       while ( $n < $count ) {
+               print "$n\n";
+               $end = $n + RTI_CHUNK_SIZE - 1;
+               $sql = "SELECT page_id, page_namespace, page_title, old_flags, old_text
+                         FROM $page, $revision, $text
+                        WHERE page_id BETWEEN $n AND $end
+                          AND page_latest=rev_id
+                          AND rev_text_id=old_id";
+               $res = $database->query($sql, "rebuildTextIndex" );
 
-       while( $s = wfFetchObject($res) ) {
-               $u = new SearchUpdate( $s->cur_id, $s->cur_title, $s->cur_text );
-               $u->doUpdate();
-               if ( ( (++$n) % 500) == 0) { echo "$n\n"; }
+               while( $s = $database->fetchObject($res) ) {
+                       $revtext = Revision::getRevisionText( $s );
+                       $u = new SearchUpdate( $s->page_id, $s->page_title, $revtext );
+                       $u->doUpdate();
+               }
+               $database->freeResult( $res );
+               $n += RTI_CHUNK_SIZE;
        }
-       wfFreeResult( $res );
 }
 
 ?>