Phpbb et tables de recherche

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


Suede
WRInaute accro
WRInaute accro
 
Messages: 3721
Inscription: Ven Oct 04, 2002 11:22

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 accro
WRInaute accro
 
Messages: 1524
Inscription: Sam Juil 12, 2003 11:42

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 passionné
WRInaute passionné
 
Messages: 538
Inscription: Ven Fév 20, 2004 16:51

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: 3721
Inscription: Ven Oct 04, 2002 11:22

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 passionné
WRInaute passionné
 
Messages: 538
Inscription: Ven Fév 20, 2004 16:51

Message le Mar Nov 09, 2004 10:34

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


a.nonyme4ever
WRInaute passionné
WRInaute passionné
 
Messages: 538
Inscription: Ven Fév 20, 2004 16:51

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: 3721
Inscription: Ven Oct 04, 2002 11:22

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 passionné
WRInaute passionné
 
Messages: 538
Inscription: Ven Fév 20, 2004 16:51

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 accro
WRInaute accro
 
Messages: 1524
Inscription: Sam Juil 12, 2003 11:42

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...


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 Julien Coquet, expert certifié officiellement par Google Analytics.

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

Lectures recommandées sur ce thème :

  • Logiciel de référencement AgentWebRanking
    AgentWebRanking est un logiciel professionnel qui permet d'analyser le positionnement d'un ou plusieurs sites dans plus de 300 moteurs de recherche dans le monde. Vous pouvez ainsi analyser les performances du référencement pour de nombreux mots-clés.
  • Transformer des citations en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités