[PHP] Comment coder un moteur de recherche sur mon site ?

Comment coder un moteur de recherche sur mon site ? [PHP] - PHP - Programmation

Marsh Posté le 27-12-2009 à 16:28:04    

Bonjour à tous,  
 
Je m'occupe de ce site : http://www.shootmeagain.com  
 
Pour l'instant, sur le site j'ai sur chaque section (groupes, chroniques, etc.) une fonction "recherche" qui fait donc une recherche dans la table MySQL concernée.  
 
J'aimerais avoir, comme sur la plupart des sites actuels, une fonction "recherche" sur la page principale qui ira rechercher le terme entré dans tous les recoins du site et pourra même afficher les résultats par ordre de pertinence, en % par exemple.
 
Mais la seule chose que j'imagine pour ça, pour l'instant, ce serait de faire une requête dans chaque table de la DB. Mais ce serait méga lourd bien sûr.
 
Alors, comment m'y prendre ?
Merci beaucoup !


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 27-12-2009 à 16:28:04   

Reply

Marsh Posté le 27-12-2009 à 16:42:43    

ta base est en innoDB ou MyIsam  ?

Reply

Marsh Posté le 27-12-2009 à 17:14:29    

MyIsam !

Reply

Marsh Posté le 27-12-2009 à 17:34:45    

tu pourras faire une recherche avec la fonction SQL MATCH,  
pour tout ce qui est pourcentage, ca se construit en fonction du clique du client, et dependra des liens trouvé, faudras inscrire tout ca dans la base aussi

Reply

Marsh Posté le 28-12-2009 à 15:16:22    

SELECT MATCH(champ1,champ2) AGAINST('motclef') AS `pertinence` FROM table where MATCH(champ1,champ2) AGAINST('motclef');
 
L'ordre par defaut est la pertinence.
 
Plus d'infos la :
http://dev.mysql.com/doc/refman/5. [...] earch.html


---------------
Plop !
Reply

Marsh Posté le 28-12-2009 à 18:55:16    

Merci beaucoup, me réjouis d'essayer ça !


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 29-12-2009 à 21:34:59    

Je confirme, toutes mes tables sont en innoDB pour les clefs primaires/étrangères et chaque table susceptible d'induire une recherche est doublée en MyISAM avec un système de MATCH si j'ai une chaine statique à chercher, sinon avec un LIKE si ma chaine est dynamique. En effet, tu ne peux pas construire de chaine dynamique avec un MATCH
Ex : MATCH (...) AGAINST ( CONCAT(...) ) ne fonctionne pas :/


Message édité par CyberDenix le 29-12-2009 à 21:35:36

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 07-02-2010 à 11:10:55    

Petit feedback, ça marche très bien mais c'est TRES lourd (serveur planté) à appliquer sur une table avec beaucoup d'entrées !  
 
Sur une table avec 80 entrées ça passe tout seul mais sur une autre qui compte 1800 entrées c'est peine perdue on dirait...


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 07-02-2010 à 20:01:45    

Même avec des index fulltext ?
 
Si tu ne comptes pas faire de jointures, tu peux essayer le moteur d'indexation Sphinx.


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 08-02-2010 à 11:06:38    

Ne vaudrait-il pas mieux utilisé un moteur de recherche type Lucène ?
Qui va indexé le tout régulièrement.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 08-02-2010 à 11:06:38   

Reply

Marsh Posté le 08-02-2010 à 13:25:21    

dawa, je trouve ça très bizarre. Je fais ce genre de requête sur des tables de plus de 20000 entrées et sur 3 ou  4 champs dans ces tables, ça passe très bien. Mediawiki fait ça aussi et ça marche, pas de pb de charge. Donc à mon avis, doit y avoir un autre pb...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-02-2010 à 13:42:37    

truc a verifier de suite :
- champs indexés ?
- encoding des tables et de la query identiques?  (si c'est pas le cas tu vas morfler.)


---------------
Plop !
Reply

Marsh Posté le 15-02-2010 à 13:27:19    

vérifie la mémoire, le cache etc que tu donnes a mysql dans la config. meme php

Reply

Sujets relatifs:

Leave a Replay

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