Phpbb et tables de recherche

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


Suede
WRInaute accro
WRInaute accro
 
Messages: 3722
Inscription: 4 Oct 2002

Phpbb et tables de recherche

Message le Lun Nov 08, 2004 14:53

Bonjour,
j'ai un forum phpbb et suis donc confronté au probleme des tables search de phpbb.
J'ai plusieurs questions:
1) Excepté la place prise, quel est l'effet de ces tables sur les performances du forum si on les optimises de manière régulière
2) Quel stratégie avez vous adopter?

Pour ma part:
- Utilisation du fichier stopwords pour limiter le nombre de mots (4000 mots dans ce fichier)
- Utilisation d'un script qui élimine de la table les mots présents dans le fichier stopwords

Par contre, j'ai l'impression que mon fichier stopwords fait planter phpbb lors des réponses (peut etre à cause de la présence d'apostrophe dans certains mots?).

Et vous?

Merci

François


lothar
WRInaute passionné
WRInaute passionné
 
Messages: 1531
Inscription: 12 Juil 2003

Message le Lun Nov 08, 2004 16:04

J'utilise aussi un fichier stopwords, avec les chiffres etc. Mais j'ai parfois des erreurs lorsque l'on poste, une erreur en rapport justement avec la fonction de recherche.

Je suis donc preneur si l'un de vous a une solution pour réduire la taille des tables de recherche...


a.nonyme4ever
WRInaute impliqué
WRInaute impliqué
 
Messages: 538
Inscription: 20 Fév 2004

Re: Phpbb et tables de recherche

Message le Mar Nov 09, 2004 1:15

Suede a écrit:Bonjour,
j'ai un forum phpbb et suis donc confronté au probleme des tables search de phpbb.
J'ai plusieurs questions:
1) Excepté la place prise, quel est l'effet de ces tables sur les performances du forum si on les optimises de manière régulière
2) Quel stratégie avez vous adopter?


Idem, ms pour ma part c'est surtout un souci de place car mon hebergeur me conseille très fortement une BDD de moins de 30Mo et je les frole.

Avez-vous des propositions et des solutions svp?


Suede
WRInaute accro
WRInaute accro
 
Messages: 3722
Inscription: 4 Oct 2002

Message le Mar Nov 09, 2004 8:49

Dans mon cas, je n'ai pas de probleme de place pour la base de donnée (excepté que ca devient plus pénible à dumper) donc c'est surtout une question de performance.
J'avais cru entendre dire qu'une fonction recherche qui passerait directement par une requete MySQL sur les tables "post_text" serait plus efficace (et non pas par les tables recherche). Est-ce que c'est vrai? Est-ce qu'il y a un mod de phpbb qui le fait ?

François


a.nonyme4ever
WRInaute impliqué
WRInaute impliqué
 
Messages: 538
Inscription: 20 Fév 2004

Message le Mar Nov 09, 2004 10:34

ça serait pas mal interessant en effet et ça soulagerait ma BDD :-)


a.nonyme4ever
WRInaute impliqué
WRInaute impliqué
 
Messages: 538
Inscription: 20 Fév 2004

Message le Mer Nov 10, 2004 3:06

lothar a écrit:J'utilise aussi un fichier stopwords, avec les chiffres etc. Mais j'ai parfois des erreurs lorsque l'on poste, une erreur en rapport justement avec la fonction de recherche.

Je suis donc preneur si l'un de vous a une solution pour réduire la taille des tables de recherche...


Serait-il possible d'avoir votre fichier stopword svp? Merci d'avance!


Suede
WRInaute accro
WRInaute accro
 
Messages: 3722
Inscription: 4 Oct 2002

Message le Mer Nov 10, 2004 9:23

Je ne sais pas si c'est conseillé. Ca peut surcharger ton fichier de maniere inutile. Je ne pense pas que les variantes orthographiques de Stockholm soit d'un grand intéret pour ton forum.

Pour se créer un fichier stopword :
http://www.phpbb.com/kb/article.php?article_id=30
egalement traduit en français ici :http://www.portail-maker.com/phpbb/viewtopic-196.html (le lien anglais est plus complet)

Code: Tout sélectionner
SELECT ls.word_id, ls.word_text, COUNT(wm.word_id) as entries FROM `phpbb_search_wordlist` as ls LEFT JOIN `phpbb_search_wordmatch` as wm ON ls.word_id=wm.word_id GROUP BY wm.word_id ORDER BY entries DESC LIMIT 0,100;

permet d'avoir les 100 mots les plus utilisés. Pour ma part, j'ai supprimé la clause limite et chargé le tout dans un fichier xls. Je trie sur plusieurs facteurs : fréquence du mot, taille du mot, les deux. Ensuite, j''établis ma liste à partir de ce fichier et je la colle dans search_stopwords.txt .
J'élimine de la base les mots du stopwords grace au script décrit dans le lien ci-dessus (et dans pas mal d'autres)

Code: Tout sélectionner
<?php
//*****  reduce_my_searchtables_with_stopwords.php ****//

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/functions_search.'.$phpEx);

// Start session management
$userdata = session_pagestart($user_ip, PAGE_SEARCH);
init_userprefs($userdata);
// End session management

$stopwords_array = file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . "/search_stopwords.txt");

$liste='';
foreach($stopwords_array as $curr_word)
{
      $liste .= ( ( $liste != '' ) ? ', ' : '' ) ."'".trim($curr_word)."'";
}

   $sql = "SELECT word_id
      FROM " . SEARCH_WORD_TABLE . "
      WHERE word_text IN ($liste)";
   if ( !($result = $db->sql_query($sql)) )
   {
      message_die(GENERAL_ERROR, 'Could not obtain common word list', '', __LINE__, __FILE__, $sql);
   }

   $common_word_id = '';
   while ( $row = $db->sql_fetchrow($result) )
   {
      $common_word_id .= ( ( $common_word_id != '' ) ? ', ' : '' ) . $row['word_id'];
   }

if ($common_word_id=='') message_die(GENERAL_ERROR,'None of the words in the list are in your search_tables.<br>Note: This could also mean the list is empty ;)');
   //echo '>'.trim($curr_word)."<<br>";
   //echo $liste .'<br>'. $common_word_id;
   //exit;

   $sql = "DELETE FROM " . SEARCH_WORD_TABLE . "
      WHERE word_id IN ($common_word_id)";
   if ( !$db->sql_query($sql) )
   {
      message_die(GENERAL_ERROR, 'Could not delete word match entry', '', __LINE__, __FILE__, $sql);
   }
   $sql = "OPTIMIZE TABLE " . SEARCH_WORD_TABLE;
   if ( !$db->sql_query($sql) )
   {
      message_die(GENERAL_ERROR, 'Could not optimize', '', __LINE__, __FILE__, $sql);
   }

   $sql = "DELETE FROM " . SEARCH_MATCH_TABLE . "
      WHERE word_id IN ($common_word_id)";
   if ( !$db->sql_query($sql) )
   {
      message_die(GENERAL_ERROR, 'Could not delete word match entry', '', __LINE__, __FILE__, $sql);
   }
   $sql = "OPTIMIZE TABLE " . SEARCH_MATCH_TABLE;
   if ( !$db->sql_query($sql) )
   {
      message_die(GENERAL_ERROR, 'Could not pütimize', '', __LINE__, __FILE__, $sql);
   }
   
   message_die(GENERAL_MESSAGE,'<b>Done!</b><br><br>The following list-entries have been removed from your searchtables:'.$liste);
//echo $liste .'<br>'. $common_word_id;

?>


Au passage, j'ai trouvé la réponse à ma question :
If you have more than enough db-space then don't mind reading this HowTo till the end. It will be of no/little relevance to you..


François


a.nonyme4ever
WRInaute impliqué
WRInaute impliqué
 
Messages: 538
Inscription: 20 Fév 2004

Message le Mer Nov 10, 2004 9:50

Suede a écrit:Je ne sais pas si c'est conseillé. Ca peut surcharger ton fichier de maniere inutile. Je ne pense pas que les variantes orthographiques de Stockholm soit d'un grand intéret pour ton forum.[...]


Merci beaucoup pour ton coup de main!

Par contre je n'ai pas compris en quoi :

If you have more than enough db-space then don't mind reading this HowTo till the end. It will be of no/little relevance to you.


Répondais à ta question :

Dans mon cas, je n'ai pas de probleme de place pour la base de donnée (excepté que ca devient plus pénible à dumper) donc c'est surtout une question de performance.
J'avais cru entendre dire qu'une fonction recherche qui passerait directement par une requete MySQL sur les tables "post_text" serait plus efficace (et non pas par les tables recherche). Est-ce que c'est vrai? Est-ce qu'il y a un mod de phpbb qui le fait ?


Il ne parle pas de la solution de recherche sur la table post_text, mais de sa solution stopwords non?


lothar
WRInaute passionné
WRInaute passionné
 
Messages: 1531
Inscription: 12 Juil 2003

Message le Mer Nov 10, 2004 10:54

Pour le fichier stop_words, j'ai éliiminé en premier lieu tous les chiffres seuls (0 à 9), puis tout l'alphabet, puis toutes les conjonctions ( Mais ou et donc or ni car ).

Mais je cherche toujours à optimiser ces tables de recherche...


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité