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

Fermé
Supersoub - 2 oct. 2007 à 13:54
 Supersoub - 3 oct. 2007 à 17:19
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 !
(°-°)
A voir également:

2 réponses

Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
2 oct. 2007 à 22:17
Salut Supersoub,

Comme ça sur le tas je verrais une solution avec 1 seule table et une autre avec 5 :

=> 1 table : champs (url, motscle, categories, styles)
Les champs motscle, categories et styles contiendraient plusieurs valeurs séparées par des ";".
Le problème c'est que ça rompt l'esprit de l'intégrité référentielle.


=> 5 tables :

-> Table images : champs(url, motscle) Oui je mettrais quand même les mots clé séparés par des ";" dans la même table parce que ce n'est pas possible de définir tous les mots clés de manière unique dans une table spécialisée (ça reviendrait à reprendre le dictionnaire de la langue française et plus encore).

-> Table categories : champs(id, nom)

-> Table styles : champs(id, nom)

-> Table cat_images : champs(images.url, categories.id)

-> Table sty_images : champs(images.url, styles.id)

Les deux dernières tables étant des tables de relation liant la première (images) aux deux suivantes (categories et styles).

Voilà comment j'aurais fait la structure personnellement. La requête devrait se faire en une seule fois. Par exemple tu veux les images ayant pour :

- mots clé : gsm, siemens
- catégories : technologie, mobile
- style : moderne

La requête devrait ressembler à :

select url
from images i, categories c, styles s, cat_images ci, sty_images si
where c.id = ci.id
and s.id = si.id
and i.url = ci.url
and i.url = si.url
and c.nom in('technologie', 'mobile') // Ici c'est plutôt un OR
and s.nom like '%moderne%'
and i.motscle like '%gsm%'
and i.motscle like '%siemens%'

On a bien 5 table et 4 jointures, le reste étant des conditions de recherche à construire dynamiquement par programmation en fonction des choix de l'utilisateur. Maintenant je ne sais pas si c'est vraiment optimal, je n'ai jamais eu à faire ce genre de moteurs de recherche personnalisé et multi critères. Mais bon courage !
0
Je vais un peu voir tout ça !
MErci à toi !!
0