| |
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
milkiway WRInaute accro

Inscrit le: 03 Fév 2004 Messages: 1949 Localisation: Venigo
|
Posté le : Mar Oct 12, 2004 20:12 Sujet du message: moteur de recherche interne |
|
|
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é

Inscrit le: 29 Juin 2003 Messages: 575 Localisation: Dans mon terrier
|
Posté le : Mar Oct 12, 2004 21:50 Sujet du message: moteur de recherche interne |
|
|
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

Inscrit le: 12 Nov 2003 Messages: 1084 Localisation: :noitasilacoL
|
Posté le : Mar Oct 12, 2004 22:20 Sujet du message: moteur de recherche interne |
|
|
J'en ai fait un petit sur mon site. Le problème, c'est la pertinence des réponses....  |
|
| |
|
 |
Dr DLP WRInaute passionné

Inscrit le: 29 Juin 2003 Messages: 575 Localisation: Dans mon terrier
|
Posté le : Mar Oct 12, 2004 22:37 Sujet du message: moteur de recherche interne |
|
|
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é

Inscrit le: 05 Juil 2004 Messages: 866
|
Posté le : Mar Oct 12, 2004 23:52 Sujet du message: moteur de recherche interne |
|
|
| Certains SGBD ( PostgreSQL, MySQL, Oracle ... ) ont une fonction de recherche Full Text et trie automatiquement selon la pertinence. |
|
| |
|
 |
Dr DLP WRInaute passionné

Inscrit le: 29 Juin 2003 Messages: 575 Localisation: Dans mon terrier
|
Posté le : Mar Oct 12, 2004 23:54 Sujet du message: moteur de recherche interne |
|
|
C'était sous-entendu pour moi
Malheuresement rajouter des index FULL TEXT ralentit les recherches  |
|
| |
|
 |
Zang WRInaute passionné

Inscrit le: 16 Sep 2004 Messages: 954
|
Posté le : Mar Oct 12, 2004 23:54 Sujet du message: moteur de recherche interne |
|
|
| tiens ca minteresse aussi un moteur de recherche interne |
|
| |
|
 |
milkiway WRInaute accro

Inscrit le: 03 Fév 2004 Messages: 1949 Localisation: Venigo
|
Posté le : Mer Oct 13, 2004 20:23 Sujet du message: moteur de recherche interne |
|
|
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
C'est vraiment sympa de ta part.
J'attend ça ! Merci |
|
| |
|
 |
Dr DLP WRInaute passionné

Inscrit le: 29 Juin 2003 Messages: 575 Localisation: Dans mon terrier
|
Posté le : Mer Oct 13, 2004 22:01 Sujet du message: moteur de recherche interne |
|
|
Je te livre le php tel quel :
| Code: |
<?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 )
| Citation: |
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. |
|
| |
|
 |
The Jedi WRInaute passionné

Inscrit le: 31 Mar 2003 Messages: 807 Localisation: Bordeaux
|
Posté le : Jeu Oct 14, 2004 10:05 Sujet du message: moteur de recherche interne |
|
|
| ^^ 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

Inscrit le: 03 Fév 2004 Messages: 1949 Localisation: Venigo
|
Posté le : Jeu Oct 14, 2004 20:12 Sujet du message: moteur de recherche interne |
|
|
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

Inscrit le: 17 Mar 2004 Messages: 208 Localisation: Laon (02)
|
Posté le : Jeu Oct 14, 2004 21:26 Sujet du message: moteur de recherche interne |
|
|
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

Inscrit le: 03 Fév 2004 Messages: 1949 Localisation: Venigo
|
Posté le : Ven Oct 15, 2004 11:23 Sujet du message: moteur de recherche interne |
|
|
| En gros ce sont des fonctions PHP ou des fonctinos SQL lors des requêtes qu'il faut utiliser ? |
|
| |
|
 |
Juxener WRInaute occasionnel

Inscrit le: 17 Mar 2004 Messages: 208 Localisation: Laon (02)
|
Posté le : Ven Oct 15, 2004 18:53 Sujet du message: moteur de recherche interne |
|
|
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

Inscrit le: 03 Fév 2004 Messages: 1949 Localisation: Venigo
|
Posté le : Ven Oct 15, 2004 19:07 Sujet du message: moteur de recherche interne |
|
|
Je me suis mal exprimé,
mieux vaut utiliser les fonctions de recherche de MySQL ou celles de PHP ? |
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
Définitions :
|
|