PDA

Voir la version complète : Regénération du cache de recherche


Gaël Donat
08/12/2005, 18h01
Bonjour à tous,

Je suis administrateur d'un forum de 600.000 messages, 80.000 utilisateurs actuellement sous PhpBB, notre base fait 1,2Go.

J'ai fait l'import des données avec Impex, j'ai eu l'occasion de corriger quelques gros bugs (je suis en rapport avec Jerry Hutchings pour les corrections).

Maintenant que mon forum VBulletin est quasi-pret je me lance à regénérer les indexes de recherche, et ôôô surprise j'estime à 15h le temps de traitement.

Donc je me posais la question, n'y a t'il pas de script permettant de lancer la régénération en ligne de commande php sous Linux, car les aller-retours entre moi et le forum doivent etre largement responsable du temps de traitement.

Merci d'avance.

Gaël.

Gaël Donat
24/12/2005, 13h02
Bon je me répond à moi meme :-)

Si certain on des serveurs dédiés, je garde sous le coude un script PHP executable en Shell qui lance :
- la regénération du cache en one shot
- la régénération de l'index de recherche en one shot

Envoyez moi un MP si ca vous branche.

Yuke
24/12/2005, 16h22
Hello,

ça peut etre utile ce genre de script ;) Est-ce que tu peux le mettre ici à la suite, comme ça, si à l'avenir quelqu'un se posait la question il aura la réponse et le code ;)

@+

Gaël Donat
27/12/2005, 14h06
Avec plaisir, j'attend juste d'etre sûr qu'il est exempt de bug ;)

Gaël Donat
31/12/2005, 00h34
Voila le premier code (index_search.php) à placer à la racine du site :

<?


define('THIS_SCRIPT', 'Forum');
require_once('./includes/init.php');
require_once('./includes/functions_databuild.php');

$vbulletin->input->clean_array_gpc('r', array(
'doprocess' => TYPE_UINT,
'autoredirect' => TYPE_BOOL,
'totalposts' => TYPE_UINT,
));

$starttime = microtime();

if (empty($vbulletin->GPC['perpage']))
{
$vbulletin->GPC['perpage'] = 250;
}

$firstpost = $db->query_first("SELECT MIN(postid) AS min FROM " . TABLE_PREFIX . "post");
$finishat = $db->query_first("SELECT MAX(postid) AS max FROM " . TABLE_PREFIX . "post");
$finishat['max']=$finishat['max']+1;
echo $vbphrase['building_search_index'] ;
//vbflush();

$foruminfo = array('indexposts' => 1);


$posts = $db->query_read("
SELECT postid, post.title, post.pagetext, post.threadid, thread.title AS threadtitle
FROM " . TABLE_PREFIX . "post AS post
INNER JOIN " . TABLE_PREFIX . "thread AS thread ON(thread.threadid = post.threadid)
INNER JOIN " . TABLE_PREFIX . "forum AS forum ON(forum.forumid = thread.forumid)
WHERE (forum.options & " . $vbulletin->bf_misc_forumoptions['indexposts'] . ")
AND post.postid >= " . $firstpost['min'] . "
AND post.postid < " . $finishat['max'] ."
ORDER BY post.postid
");

echo $vbphrase['posts_queried'];
//vbflush();

while ($post = $db->fetch_array($posts) AND (!$vbulletin->GPC['doprocess'] OR $vbulletin->GPC['totalposts'] < $vbulletin->GPC['doprocess']))
{
$vbulletin->GPC['totalposts']++;

echo construct_phrase($vbphrase['processing_x'], $post['postid']) . ' ... ';
//bflush();

if (empty($firstpost["$post[threadid]"]))
{
echo $vbphrase['querying_first_post_of_thread'];
//vbflush();
$getfirstpost = $db->query_first("
SELECT MIN(postid) AS postid
FROM " . TABLE_PREFIX . "post
WHERE threadid = $post[threadid]
");
$firstpost["$post[threadid]"] = $getfirstpost['postid'];
}

build_post_index($post['postid'], $foruminfo, iif($post['postid'] == $firstpost["$post[threadid]"], 1, 0), $post);

echo $vbphrase['done'] . "\n";
//vbflush();
}

require_once(DIR . '/includes/functions_misc.php');
$pagetime = vb_number_format(fetch_microtime_difference($start time), 2);
echo construct_phrase($vbphrase['processing_time_x'], $pagetime) . construct_phrase($vbphrase['total_posts_processed_x'], $vbulletin->GPC['totalposts']);
//vbflush();



echo('rebuilt_search_index_successfully');



C'est un code adapté du misc.php pour la regeneration de l'index de recherche, il suffit de l'appeller simplement depuis Ms-Dos ou Unix avec la commande :

php index_search.php

Ce script est à effacé IMPERATIVEMENT après usage.

Le script affiche la liste des posts :

... 26043
... 26044
... 26045
... 26046
... 26047
... 26048
... 26049
... 26050
... 26051

Je posterai le suivant bientot :-)

Pitchoune
31/12/2005, 17h26
Simple amélioration : appelle global.php et non pas includes/init.php, il est appelé tout seul par global.php :)

Gaël Donat
31/12/2005, 18h01
J'ai viré global exprès en faite :-D

Car c'est dans global qu'on vérifie les droits d'utiliser le panneau d'admin et donc si je laisse global au lieu de lancer mon traitement je me prends le code HTML de connexion ;)

d_dupagne
16/01/2006, 07h53
Maintenant que mon forum VBulletin est quasi-pret je me lance à regénérer les indexes de recherche, et ôôô surprise j'estime à 15h le temps de traitement.


Bonjour,

J'ai un problème proche. Je viens de migrer de la 3.06 à la 3.5.3 avec un gros forum.

L'admin me propose de modifier mes fichiers post et word pour passer en fulltext Mysql. J'ai lancé l'opération en acceptant la suppression des anciens cache, ce qui a bloqué mon serveur dédié par augmentation de la charge à 800.

Je n'ai pas compris à quoi correspond ce passage en "fulltext Mysql". Que puis-je faire ?

Gaël Donat
16/01/2006, 09h49
Une recherche sur google avec les mots "full text mysql" t'aurais surement répondu plus vite que moi !

http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html