Phpbb et tables de recherche

WRInaute passionné
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
 
WRInaute passionné
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...
 
WRInaute occasionnel
Suede a dit:
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?
 
WRInaute passionné
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
 
WRInaute occasionnel
lothar a dit:
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!
 
WRInaute passionné
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:
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:
<?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
 
WRInaute occasionnel
Suede a dit:
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?
 
WRInaute passionné
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...
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut