Yep tout le monde !
Bon j'aimerais pouvoir rendre mes requetes plus pertinente !
J'ai une sorte de mini moteur de recherche en php qui tappe dans une base de donnée Mysql.
Comment afficher mes résultats en fonction de leur pertinence ?
Ex :
On recherche tous les livres contenant les mots : php, mysql, pertinence
J'aimerais donc afficher en premier les livres qui contiennent les 3 mots, soit dans leurs titres ou dans leurs description, puis ceux qui contiennent que 2 mots puis ceux qui en ont qu'un seul !
Merci de votre aide.
P.S: Sachant que s'est un moteur de recherche à la base, je ne maîtrise ni les mots tappés, ni le nb de mots tappés !
# nombre d'occurences ?
Posté par nicodache . Évalué à 2.
maintenant, si tu y tiens, tu peux resortir ton cahier d'analyse combinatoire et de math, et y aller à coup de recherches méchantes, genre
recherche pour 1, 2, 3, 4
recherche pour 1, 2, 3
recherche pour 1, 2, 4
recherche pour 1, 3, 4
recherche pour 2, 3, 4
recherche pour 1, 2
recherche pour 1, 3
recherche pour 1, 4
recherche pour 2, 3
recherche pour 2, 4
recherche pour 3, 4
recherche pour 1
recherche pour 2
recherche pour 3
recherche pour 4
et bien sur, compléter entre chaque recherche la liste des enregistrement déja trouvés pour éviter les doublons (si un enregstrement contient 1 et 2, il sera plus que probablement repris dans la recherche sur 1 et 2, ainsi que dans la recherche 1, et la recherche 2...)
toujours envie de faire ca comme ca ? ;)
[^] # Re: nombre d'occurences ?
Posté par roule007 . Évalué à 1.
Merci.
[^] # Re: nombre d'occurences ?
Posté par nicodache . Évalué à 2.
[^] # Re: nombre d'occurences ?
Posté par roule007 . Évalué à 1.
Merci.
[^] # Re: nombre d'occurences ?
Posté par nicodache . Évalué à 2.
# sans doute pas optimisé
Posté par Hardy Damien . Évalué à 2.
"url",
"titre"
from
"table"
where
locate('php',champs) > 0 or locate('mysql',champs) > 0 or locate('pertinance',champs) > 0
order by
if(locate('php',champs) > 0, 1, 0) + if(locate('mysql',champs) > 0, 1, 0) + if(locate('pertinance',champs) > 0, 1, 0) desc ;
ça n'est pas testé.
un inconvéniant c'est que si un mot apparait plusieurs fois il n'est compté qu'une fois ...
Dam
# indexeur avec une base d'indexation
Posté par FReEDoM (site web personnel) . Évalué à 3.
La base d'intégration ressemble à :
Mot : numéros de livre
bonjour : 1,3,7
bien : 2,7
va : 1,8
Donc il te faut un indexeur que tu fasse tourner régulièrement et un moteur qui en fonction des mots données extrait de la base d'indexation les documents qui contiennent d'abord tous N les mots, N-1 etc...
# fonction MATCH ... AGAINST
Posté par clem . Évalué à 3.
Pour Mysql, c'est MATCH ... AGAINST (pas testé)
Pour l'utilisation, voir la doc :
http://www.nexen.net/docs/mysql/annotee/fulltext-search.php(...)
Exemple de requête :
mysql> SELECT id, body, MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root') AS score
-> FROM articles WHERE MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root');
+----+-------------------------------------+-----------------+
| id | body | score |
+----+-------------------------------------+-----------------+
| 4 | 1. Never run mysqld as root. 2. ... | 1.5055546709332 |
| 6 | When configured properly, MySQL ... | 1.31140957288 |
+----+-------------------------------------+-----------------+
2 rows in set (0.00 sec)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.