moteur de recherche sans création de bdd

moteur de recherche sans création de bdd - PHP - Programmation

Marsh Posté le 08-02-2005 à 14:54:20    

bonjour,
 
pour le site que je suis en train de réaliser, on m'a demandé de faire un moteur de recherche interne au site.
Celui ci permettrait de recenser des données qui se retrouvent dans mes champs d'une de mes tables de ma base de données :pt1cable:  
Cependant, je ne veux pas créer une autre table où seront rentrées des mots clés....
Je sais pas si vosu m'avez compris mais voici un exemple : ;)  
 
EXEMPLE:
 
   j'ai une table où sont rentré des incidents informatiques. mes utilisateurs peuvent consulter ces incidents selon le réparateur, la catégorie, la sous catégorie, le statut(en cours, clos, a traiter)(affichage sous forme d'un tableau)
   Ce moteur de recherche servira pour la sous categorie
   donc l'utilisateur tapera un mot clé(ex:pilote ou outlook....) et je voudrais que cela affiche les incidnets avec ces mots clés sous la meme forme que le tableau déjà établi.
________________________________________________________________________
 
j'ai essayé de chercher sur le net mais la plupart des liens que je trouve mettent en place une base de données avec des mots clés.
 
Si quelqu'un peut me donner des conseils, je suis a son écoute ;)
 
a biento
 
merci.... :hello:  

Reply

Marsh Posté le 08-02-2005 à 14:54:20   

Reply

Marsh Posté le 08-02-2005 à 16:50:16    

SELECT * FROM ma_table WHERE champ_incident LIKE '%mot_cle%'
 
Si je ne dis psa de bêtise...
 
++


Message édité par Dj YeLL le 08-02-2005 à 16:50:37

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 08-02-2005 à 18:04:43    

Les tables myisam de mysql supportent les index fulltext. C'est le principe de la table de mots clefs en automatisé. Cependant, si tu ne peux pas toucher à la structure de ta base tu es condamné à faire des like comme explique par Dj YeLL, l'inconvénient c'est que c'est très lent.

Reply

Marsh Posté le 09-02-2005 à 08:56:21    

kalex a écrit :

Les tables myisam de mysql supportent les index fulltext. C'est le principe de la table de mots clefs en automatisé. Cependant, si tu ne peux pas toucher à la structure de ta base tu es condamné à faire des like comme explique par Dj YeLL, l'inconvénient c'est que c'est très lent.


 
en gros la tu me dis que je suis obligé de rajouter uen table avec des mots clés comme la plupart des moteurs de recherche? :??:  :(  
puis j'ai essayé de faire la requête je me doutais qu'il fallait faire comme ca, on me l'avait expliqué.Cependant, je ne vois pas trop où la mettre...
 
++
 
merci :hello:   ;)

Reply

Marsh Posté le 09-02-2005 à 21:24:35    

Via un formulaire tu définie $mot_recherche.

Code :
  1. $query = "SELECT * FROM `ma_table`
  2.           WHERE `champ_incident`
  3.           LIKE '%".$mot_recherche."%'";
  4. $mysql_query = mysql_query($query);
  5. while ( $result = mysql_fetch_array($mysql_query) ) {
  6.    echo "La page ".$result['page']." contient le mot clé recherché.<br>";
  7. }


 
Je sais pas si c'est bien clair mais ca devrait aider je pense.
 
On va encore me dire "c'est du sql sur mysql et ya pas que mysql" je sais je sais je suis aussi pour la défense des autres SGBDR mais bon comme MySql est le plus répendu je pense qu'il fait de bon exemples. Après chacun son clan lol.


Message édité par dwogsi le 09-02-2005 à 21:33:12

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 09-02-2005 à 21:31:11    

kalex a écrit :

Les tables myisam de mysql supportent les index fulltext. C'est le principe de la table de mots clefs en automatisé. Cependant, si tu ne peux pas toucher à la structure de ta base tu es condamné à faire des like comme explique par Dj YeLL, l'inconvénient c'est que c'est très lent.


Il faut pas abuser non plus quand même ;) c'est lent par rapport à la moyenne mais ca va pas durer 10 seconds quoi que ça dépend de la quantité de données mais il y a quand mêmes des petites astuces pour optimiser le résultat.

Reply

Marsh Posté le 09-02-2005 à 21:34:11    

zeal21 a écrit :

en gros la tu me dis que je suis obligé de rajouter uen table avec des mots clés comme la plupart des moteurs de recherche? :??:  :(  

C'est ça, mais avec un index fulltext tu délègues tout à mysql.
Tuto : http://omiossec.developpez.com/mysql/fulltext/
La doc :http://dev.mysql.com/doc/mysql/fr/fulltext-search.html

Reply

Marsh Posté le 09-02-2005 à 21:36:30    

Ouai mais bon en même temps si tu a déjà une BDD avec des tonnes de données, laisse tomber la création d'une nouvelle table et adopte le LIKE du sql qui rend certe la procédure plus lente mais ca reste tout a fait acceptable.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 09-02-2005 à 21:39:04    

dwogsi a écrit :

Ouai mais bon en même temps si tu a déjà une BDD avec des tonnes de données, laisse tomber la création d'une nouvelle table et adopte le LIKE du sql qui rend certe la procédure plus lente mais ca reste tout a fait acceptable.

Je ne comprends pas pourquoi. Avoir des tonnes de données c'est justement une bonne raison pour créer un index !

Reply

Marsh Posté le 09-02-2005 à 21:42:47    

Bon ok aprés ca depend du niveau du gars!
Maintenant reste à savoir si il est en mesure de créer un script pour indexer tout ca, parceque mauellement c'est quand même chaud..
 
En fait je me suis dit que vu les questions qu'il pose il ne devait pas avoir les compétances pour créer un tel script (ce n'est pas du tout un reproche).
 
Voila je reconnais que comme j'ai dit les choses ca apparaissait comme étant monumentalement con! lol


Message édité par dwogsi le 09-02-2005 à 21:43:22

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 09-02-2005 à 21:42:47   

Reply

Marsh Posté le 09-02-2005 à 21:51:38    

J'utilise pas ces index (cause innodb, je gère ça à la main ;)) mais il me semble qu'il suffi d'un "ALTER TABLE ... ADD FULLTEXT ..." pour en ajouté un. :)

Reply

Marsh Posté le 09-02-2005 à 21:53:48    

Effectivement ouai.
Bon de toute facon c'est lui qui voit!


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 10-02-2005 à 08:48:49    

Merci pour votre attention je vais essayer tout ça....
a biento ;)

Reply

Marsh Posté le 10-02-2005 à 09:55:39    

berceker united a écrit :

Il faut pas abuser non plus quand même ;) c'est lent par rapport à la moyenne mais ca va pas durer 10 seconds quoi que ça dépend de la quantité de données mais il y a quand mêmes des petites astuces pour optimiser le résultat.


C'est tout de même pas juste 'un peu lent' par rapport au reste, c'est excessivement lent, non ? Table scan et, pour chaque record, une recherche d'une sous-chaîne. Le genre de truc qui met la pression sur le système, potentiellement un single point of failure.
 
Tu penses à quelle astuce, dans le cas d'un LIKE %x% bête et méchant ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 10-02-2005 à 15:36:29    

sircam a écrit :

C'est tout de même pas juste 'un peu lent' par rapport au reste, c'est excessivement lent, non ? Table scan et, pour chaque record, une recherche d'une sous-chaîne. Le genre de truc qui met la pression sur le système, potentiellement un single point of failure.
 
Tu penses à quelle astuce, dans le cas d'un LIKE %x% bête et méchant ?


J'ai pas lu le topic en détail mais je sais que nous avons recontré ce genre de problème dans mon ancienne boite. Nous avons fait un test sur une table de plusieurs méga.  
Test 1 : Demander a SQL de faire la recherche LIKE.
Test 2 : Retourner toute les informations et faire la recherche via php.
Au final c'est Test 2 qui a gagné. Pourquoi?  je ne sais pas cela m'étonne aussi !

Reply

Marsh Posté le 10-02-2005 à 16:17:29    

Berceker United a écrit :

Test 2 : Retourner toute les informations et faire la recherche via php.
Au final c'est Test 2 qui a gagné.


euh....ca te derangeré de me donner la méthode stp :ange: lol
qu'est ce que tu appelle par retourner les informations?
tu peux me donner des pistes stp?
 
merci si tu le fais ;) :jap:  
 :hello:  

Reply

Marsh Posté le 10-02-2005 à 16:19:29    

J'imagines qu'ils avaient fait un simple "select * from table".

Reply

Marsh Posté le 10-02-2005 à 16:55:30    

Berceker United a écrit :

J'ai pas lu le topic en détail mais je sais que nous avons recontré ce genre de problème dans mon ancienne boite. Nous avons fait un test sur une table de plusieurs méga.  
Test 1 : Demander a SQL de faire la recherche LIKE.
Test 2 : Retourner toute les informations et faire la recherche via php.
Au final c'est Test 2 qui a gagné. Pourquoi?  je ne sais pas cela m'étonne aussi !


Très étrange, mais je ne crois pas que cela soit généralisable !  :ouch:  
 
- Si le serveur PHP n'est physiquement sur la même machine que le serveur DB, le temps réseau prendra le dessus et la recherche PHP ne peut être que plus lente - je parie que les deux serveurs étaient sur la même machine lors de tes tests, ou bien étaient très "proches";
- Tu retournes potentiellement un nombre invraissemblable de lignes à PHP, alors qu'au final, il n'y a que peu de résultat. Si la bécane est déjà memory-bound, voire CPU-bound, ça va chier dans le ventilo et c'est chercher les ennuis;
- Ca se bouscule inutilement sur le rézo;
- Ton DBMS était peut-être anémique lors du test par rapport à un serveur PHP dopé aux hormones.
 
Mais ça prouve bien qu'il ne faut pas se fier aux a priori, et que rien ne remplace un benchmark!


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 10-02-2005 à 18:04:04    

sircam a écrit :

Très étrange, mais je ne crois pas que cela soit généralisable !  :ouch:  
 
- Si le serveur PHP n'est physiquement sur la même machine que le serveur DB, le temps réseau prendra le dessus et la recherche PHP ne peut être que plus lente - je parie que les deux serveurs étaient sur la même machine lors de tes tests, ou bien étaient très "proches";
- Tu retournes potentiellement un nombre invraissemblable de lignes à PHP, alors qu'au final, il n'y a que peu de résultat. Si la bécane est déjà memory-bound, voire CPU-bound, ça va chier dans le ventilo et c'est chercher les ennuis;
- Ca se bouscule inutilement sur le rézo;
- Ton DBMS était peut-être anémique lors du test par rapport à un serveur PHP dopé aux hormones.
 
Mais ça prouve bien qu'il ne faut pas se fier aux a priori, et que rien ne remplace un benchmark!


 
2(cluster) x Quadruple CPU Intel 2Go MHz 4Go Ram. Bon j'avous que c'est pas une machine de surcouf. Nous avons utilisé des fonctions telle que mysql_unbuffered_query() qui est reduit de pas mal la charge mais il ne faut pas l'utiliser n'importe comment.  
Ha j'ai oublié un truc, c'est à refroidissement liquide !


Message édité par Berceker United le 10-02-2005 à 18:06:37
Reply

Marsh Posté le 10-02-2005 à 18:14:38    

Berceker United a écrit :

Ha j'ai oublié un truc, c'est à refroidissement liquide !


Je le savais  :D  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed