PHP / MySQL Recherche d'images par mots-clés

PHP / MySQL Recherche d'images par mots-clés - SQL/NoSQL - Programmation

Marsh Posté le 02-10-2007 à 14:23:16    

Salut à tous !
 
Une question qui va sans doute paraître +/- simple à certains...
 
Je voudrais faire une sorte de moteur de recherche par mot-clés, catégorie et style sur une série d'images et je ne sais pas trop comment construire ma base de données et mes requêtes !
 
Je travaille avec PHP/MySQL.
 
Voici l'idée :
 
- chaque image est liée à plusieurs mots-clés, plusieurs catégories et éventuellement plusieurs styles
- les utilisateurs peuvent saisir autant de mots qu'ils le veulent dans un champ de recherche
- les utilisateurs peuvent choisir une ou plusieurs catégorie dans un menu déroulant
- les utilisateurs peuvent choisir un ou plusieurs styles dans un menu déroulant
 
=> "mon moteur de recherche" va rechercher dans les mots-clés et affiche les images de la (des) catégories et styles choisis, et ce, selon la pertinence (performance)
(=> il fait également une recherche pour des mots semblables)
 
 
Voici les questions :
 
- Est-ce que je dois faire une table image, une table mot-clés et une table intermédiaire qui lie chaque image à des mot-clés ? (idem pour les catégories et styles)
Si oui, dans le champ "mot-clés" de ma table image, je dois séparer les "clés" renvoyant aux mots-clés par des "," ?
 
- Est-ce que je dois d'abord faire une requête pour les catégories et styles PUIS sur les mots-clés avec le résultat de cette requête ?
Si oui, faut-il faire un tableau en PHP ou une table en MySQL pour sauvegarder les résultats de la première requête ?
Si non, peut-on faire une seule requête pour le tout ?
 
- Que dois-je faire pour rendre la recherche la plus rapide et la plus efficace possible sachant qu'à terme il y aura des centaines de mots-clés ?
 
 
Voilà en gros le problème ! Je m'y connais un peu en MySQL et je pourrais arriver à faire cette recherche moyennant certainement beaucoup de ligne de codes (inutiles) et une performance plus que moyenne. Je fais donc appel à vous dans l'espoir d'avoir des pistes pour réaliser un moteur de recherche puissant ! (-,
 
D'avance merci !


---------------
(°-°)
Reply

Marsh Posté le 02-10-2007 à 14:23:16   

Reply

Marsh Posté le 02-10-2007 à 16:10:44    

Moi, je ferais :
- une table image (qui n'a pas de champ "mots-clés",  
- une table mot-clé, où chaque mot est une entrée dans la table
- une table qui lie une image à des mots-clés
- une table catégorie
- une table qui lie une image à des catégories
- une table style
- une table qui lie une image à des styles
 
Lors de la recherche, tu ne fais qu'une requête. Suivant ce que tu veux comme résultat, tu joue avec les opérateurs AND et OR quand il y a plusieurs mots-clés/cats/styles donnés en entrée (genre, soit tu veux trouver les images qui correspondent exactement à tous les mots-clés/cats/styles soit, tu veux les images qui correspondent à au moins 1 mot-clé/cat/style). Attention, l'opérateur OR est plus long que AND (normal, ça ramène plus d'enregistrements).

Reply

Marsh Posté le 02-10-2007 à 17:06:09    

Merci rufo !
 
Bêtes questions...  
 
En fait dans les tables qui lient, il y a juste des couples d'id de photos et d'id de mots-clés (par exemple) ?
 
Est-ce que c'est mieux de faire des recherches "FULLTEXT" (MATCH AGAINST) ou alors utiliser "LIKE" ?

Reply

Marsh Posté le 03-10-2007 à 09:17:54    

oui, les tables de liaisons contiennent 3 champs :
clé primaire de l'enregistrement, clé étrangère de la table 1, clé étrangère de la table 2
 
MATCH AGAINST est plus performant (vitesse) que like ;)

Reply

Sujets relatifs:

Leave a Replay

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