moteur de recherche interne

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

milkiway
WRInaute accro
WRInaute accro
 
Messages: 2216
Inscription: Mar Fév 03, 2004 3:00

moteur de recherche interne

Message le Mar Oct 12, 2004 19:12

Bonjour,
je monte un site qui est destiné a recevoir une grosse quantité d"informations piochées dans une base de donnée, pensez vous qu'il est plus intelligent de coder moi même un moteur de recherche en PHP ou alors d'en prendre un tout fait ?
Dans ce cas que me conseillez vous ?

Ce qui est très important c'est qu'il FAUT qu'il soit :
- rapide
- léger, très léger
- efficace (...)
Merci !


Dr DLP
WRInaute passionné
WRInaute passionné
 
Messages: 579
Inscription: Sam Juin 28, 2003 23:42

Message le Mar Oct 12, 2004 20:50

Si c'est sur UNE base de données qui t'appartient, je te conseille de le coder toi même.
Après ça dépend du type de résultats que tu veux sortir.


jeromax
WRInaute accro
WRInaute accro
 
Messages: 1087
Inscription: Mer Nov 12, 2003 17:48

Message le Mar Oct 12, 2004 21:20

J'en ai fait un petit sur mon site. Le problème, c'est la pertinence des réponses.... :?


Dr DLP
WRInaute passionné
WRInaute passionné
 
Messages: 579
Inscription: Sam Juin 28, 2003 23:42

Message le Mar Oct 12, 2004 21:37

Pour ma part j'utilise cinq requêtes SQL pour une recherche, par ordre de pertinence(recherche d'infos sur un site) :
  • Nom exact
  • Nom + description + contenu approchant
  • Nom + descrîption approchant
  • Nom approchant
  • Quasiment aléatoire

Si ça t'intéresse milkiway, je te mettrais ça de retour chez moi :)

shrom
WRInaute passionné
WRInaute passionné
 
Messages: 865
Inscription: Lun Juil 05, 2004 22:37

Message le Mar Oct 12, 2004 22:52

Certains SGBD ( PostgreSQL, MySQL, Oracle ... ) ont une fonction de recherche Full Text et trie automatiquement selon la pertinence.


Dr DLP
WRInaute passionné
WRInaute passionné
 
Messages: 579
Inscription: Sam Juin 28, 2003 23:42

Message le Mar Oct 12, 2004 22:54

C'était sous-entendu pour moi :)
Malheuresement rajouter des index FULL TEXT ralentit les recherches :|

Zang
WRInaute passionné
WRInaute passionné
 
Messages: 968
Inscription: Jeu Sep 16, 2004 2:34

Message le Mar Oct 12, 2004 22:54

tiens ca minteresse aussi un moteur de recherche interne

milkiway
WRInaute accro
WRInaute accro
 
Messages: 2216
Inscription: Mar Fév 03, 2004 3:00

Message le Mer Oct 13, 2004 19:23

Merci pour les réponses !

Dr DLP a écrit:Pour ma part j'utilise cinq requêtes SQL pour une recherche, par ordre de pertinence(recherche d'infos sur un site) :
  • Nom exact
  • Nom + description + contenu approchant
  • Nom + descrîption approchant
  • Nom approchant
  • Quasiment aléatoire
Si ça t'intéresse milkiway, je te mettrais ça de retour chez moi :)

Ca m'intéresse beaucoup :D
C'est vraiment sympa de ta part.
J'attend ça ! Merci


Dr DLP
WRInaute passionné
WRInaute passionné
 
Messages: 579
Inscription: Sam Juin 28, 2003 23:42

Message le Mer Oct 13, 2004 21:01

Je te livre le php tel quel :
Code: Tout sélectionner
<?php

require('common.php');
require('configs/functions_common.php');

function already_displayed ( $seeked_site_id, $seeked_array )
{
   for ( $h = 0 ; $h < count($seeked_array); $h ++)
   {
      if ( $seeked_site_id  == $seeked_array[$h][0] )
      {
         return true;
      }
   }
   return false;
}

$search_query = strtolower(trim(htmlspecialchars($_GET['search_query'])));
$where = (isset($_GET['sub_cat_id'])) ? 'AND site_cat='.intval($_GET['sub_cat_id']) : '';

// Etape absolue, recherche d'un titre de site correspondant à la requête
$sql = mysql_query("SELECT site_id, site_link, site_cat, site_name, site_desc FROM easy_links_sites WHERE LOCATE('$search_query',site_name) > 0 $where") or die ("Fhtagn : " . mysql_errno()." : ".mysql_error()."<br />".$sql);
while( $sites = mysql_fetch_row($sql) )
{
   $sites_to_show[] = $sites;
}

// Deuxième étape absolue, la recherche croisée titre/description/contenu
// Cette recherche est la plus puissante puiqu'elle assure une très importante pertinence de la requête
$sql = mysql_query("SELECT site_id, site_link, site_cat, site_name, site_desc, site_contents, MATCH (site_name,site_desc,site_contents) AGAINST ('$search_query') AS score FROM easy_links_sites WHERE MATCH (site_name,site_desc,site_contents) AGAINST ('$search_query') $where ORDER BY score DESC") or die ("Fhtagn : " . mysql_errno()." : ".mysql_error()."<br />".$sql);
while( $sites = mysql_fetch_row($sql) )
{
   if ( !already_displayed($sites[0], $sites_to_show) )
   {
      $sites_to_show[] = $sites;
   }
}

// Première étape relative, la recherche croisée titre/description
$sql = mysql_query("SELECT site_id, site_link, site_cat, site_name, site_desc, site_contents, MATCH (site_name,site_desc) AGAINST ('$search_query') AS score FROM easy_links_sites WHERE MATCH (site_name,site_desc) AGAINST ('$search_query') $where ORDER BY score DESC") or die ("Fhtagn : " . mysql_errno()." : ".mysql_error()."<br />".$sql);
while( $sites = mysql_fetch_row($sql) )
{
   if ( !already_displayed($sites[0], $sites_to_show) )
   {
      $sites_to_show[] = $sites;
   }
}

// Deuxième étape relative, la recherche croisée description/contenu
$sql = mysql_query("SELECT site_id, site_link, site_cat, site_name, site_desc, site_contents, MATCH (site_desc,site_contents) AGAINST ('$search_query') AS score FROM easy_links_sites WHERE MATCH (site_desc,site_contents) AGAINST ('$search_query') $where ORDER BY score DESC") or die ("Fhtagn : " . mysql_errno()." : ".mysql_error()."<br />".$sql);
while( $sites = mysql_fetch_row($sql) )
{
   if ( !already_displayed($sites[0], $sites_to_show) )
   {
      $sites_to_show[] = $sites;
   }
}

// Troisième étape relative, la requête "ressemble" au titre d'un site
$sql = mysql_query("SELECT site_id, site_link, site_cat, site_name, site_desc, site_contents, SUBSTRING(SOUNDEX(site_name),1,2) AS cosmos , SUBSTRING(SOUNDEX('$search_query'),1,2) AS spatio FROM easy_links_sites WHERE SUBSTRING(SOUNDEX(site_name),1,2) = SUBSTRING(SOUNDEX('$search_query'),1,2) $where") or die ("Fhtagn : " . mysql_errno()." : ".mysql_error()."<br />".$sql);
while( $sites = mysql_fetch_row($sql) )
{
   if ( !already_displayed($sites[0], $sites_to_show) )
   {
      $sites_to_show[] = $sites;
   }
}

$template->assign("sites",$sites_to_show);

template_display('search.tpl');

?>

La requête de création de la table ( le seul truc important ce sont les index )
CREATE TABLE easy_links_sites (
site_id int(8) NOT NULL auto_increment,
site_name varchar(255) NOT NULL default '',
site_desc varchar(255) NOT NULL default '',
site_link varchar(255) NOT NULL default '',
site_cat int(8) NOT NULL default '1',
site_registered int(11) NOT NULL default '0',
site_note decimal(4,2) NOT NULL default '10.00',
site_hits int(8) NOT NULL default '0',
site_cool tinyint(1) NOT NULL default '0',
site_approved tinyint(1) NOT NULL default '0',
site_voters int(8) NOT NULL default '0',
site_owner_name varchar(255) NOT NULL default '',
site_owner_mail varchar(255) NOT NULL default '',
site_contents text NOT NULL,
site_last_update int(11) NOT NULL default '0',
site_thumb varchar(255) NOT NULL default '',
site_abstract varchar(255) NOT NULL default '',
site_images_last_update int(11) NOT NULL default '0',
PRIMARY KEY (site_id),
FULLTEXT KEY site_desc (site_desc,site_contents),
FULLTEXT KEY site_name (site_name,site_desc),
FULLTEXT KEY site_contents (site_name,site_desc,site_contents)

) TYPE=MyISAM;


L'affichage des résultats se fait via Smarty.
Si tu veux voir ce que ça donne en action : -http://jeux-gratuits-en-ligne.com/annuaire-jeux/ .
Si un résultat ne te semble pas pertinent, jette un oeil à l'url donnée, le contenu de la page est non affiché mais pris en compte.

Oncle Tom
WRInaute passionné
WRInaute passionné
 
Messages: 812
Inscription: Lun Mar 31, 2003 11:16

Message le Jeu Oct 14, 2004 9:05

^^ pour faciliter la recherche sur tout mon site j'ai préféré utiliser Google. Ca a l'avantage de mettre l'utilisateur dans un bain qu'il connait déjà. Certes c'est moins personnalisé mais dans la mesure où c'est une recherche globale au site, c'est pas gênant.

milkiway
WRInaute accro
WRInaute accro
 
Messages: 2216
Inscription: Mar Fév 03, 2004 3:00

Message le Jeu Oct 14, 2004 19:12

Merci bcp DLP mais je suis novice en SQL alors je crois que je vais regarder la doc en profondeur pour comprendre ton code !

The jEDI : oui mais ça nécessite une indexation par GG


Juxener
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 209
Inscription: Mer Mar 17, 2004 16:58

Message le Jeu Oct 14, 2004 20:26

Fait ton propre script, c le seul moyen d'avoir qqch de fiable et de parfait !

PS: Pour le mien, aucune requête SQL :p !

milkiway
WRInaute accro
WRInaute accro
 
Messages: 2216
Inscription: Mar Fév 03, 2004 3:00

Message le Ven Oct 15, 2004 10:23

En gros ce sont des fonctions PHP ou des fonctinos SQL lors des requêtes qu'il faut utiliser ?


Juxener
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 209
Inscription: Mer Mar 17, 2004 16:58

Message le Ven Oct 15, 2004 17:53

En principe un moteur ça se joue sur un BDD (couramment MySQL), donc avec des requêtes SQL (appellées par des fonctions PHP d'ailleurs :d).
Aprés, pour ceux qui préfére utiliser SQL le moins possible, c possible sans... Avec une gestion par tableaux PHP, des sortes de fausses BDD.

milkiway
WRInaute accro
WRInaute accro
 
Messages: 2216
Inscription: Mar Fév 03, 2004 3:00

Message le Ven Oct 15, 2004 18:07

Je me suis mal exprimé,
mieux vaut utiliser les fonctions de recherche de MySQL ou celles de PHP ?

moteur de recherche interne

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 :

Consultez la description détaillée des produits ou services de Google suivants : Google Custom Search Engine, Google SearchMash, Google mail

  • Calculer le ratio de liens profonds
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
  • Logiciel d'analyse du positionnement
    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 textes non cliquables 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: simbadlemarin5 et 0 invités