Bonjour,
Dans la gestion de ma photothèque, je souhaite faire remonter les recherches textuelles de façon plus précise.
Voici un aperçu de ma BDD :
pict_id (int primary) | pict_filename_orig (varchar 200 index) | index_fulltext (text) |
avec un index fulltext sur les 2 champs textes.
Ma requête actuelle quand un gars rentre "ciel bleu.jpg" :
Code :
- SELECT * , MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel bleu\\.jpg') AS score
- FROM phototek
- WHERE MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel* bleu*\\.jpg*' IN BOOLEAN MODE)
- ORDER BY score DESC
|
Ça marche pas trop mal sauf que si j'ai 5000 photos avec les mots clés ciel, bleu et jpg dans "index_fulltext", ce n'est pas forcement ciel bleu.jpg qui remonte en premier...
J'ai essayé d'ajouter un peu de LIKE('%%') pour pondérer le résultats tout en gardant les avantages du match against :
Code :
- SELECT * ,
- scorebis = IF(p.pict_filename_orig LIKE('%ciel bleu.jpg%'),1,0),
- MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel bleu\\.jpg') AS score
- FROM phototek
- WHERE MATCH (pict_filename_orig, index_fulltext) AGAINST ('ciel* bleu*\\.jpg*' IN BOOLEAN MODE)
- ORDER BY scorebis DESC, score DESC
|
Ce qui ne fonctionne pas (sinon je posterais pas ici ^^).
J'ai essayé pas mal de truc sans vraiment trouver et Google ne pas des masses aidé jusqu'à présent...
...à vrai dire je ne suis même pas sur que la voie que j'emprunte sois la plus logique.
Au pire je pourrais refaire le tri derrière en PHP mais bon tant qu'a faire.
Merci d'avance
Message édité par mechkurt le 27-05-2011 à 08:43:31