Mon moteur de recherche par en sucette - PHP - Programmation
Marsh Posté le 18-06-2005 à 13:55:16
Salut,
Tu connais MATCH et AGAINST avec des index en FULL TEXT
Je pense que ce serait plus simple et rapide avec
Marsh Posté le 18-06-2005 à 14:18:49
non connais pas
je debute en faite donc j'utilise ce qui est a ma portée tout en essayant d'en apprendre d'avantage
m'enfin pour le moment ya un probleme avec ma boucle qui ve pas bouclé , et qui affiche un resultat invalide
Marsh Posté le 19-06-2005 à 17:53:08
Personne n'aurait une idée sur le pourquoi du comment ?
Je ne comprend pas pkoi il affiche 1resultat alors que celui si n'a rien avoir avec le mot recherché.
Marsh Posté le 19-06-2005 à 20:47:25
c'est pour lesquels de tes 4 types de recherche que ca donne des résultats bizarres? les 4? un seul?
Marsh Posté le 19-06-2005 à 21:13:05
pour tous
sa maffiche qu'un seul resultat a savoir la derniere entrée de ma table (news sur battlefied).
visiblement ça serait un soucis au nivo de la requete
"SELECT title_article, text_article, author_article,
date_article FROM Articles WHERE title_article OR text_article OR author_article LIKE '%$expression[1]'";
Marsh Posté le 20-06-2005 à 02:30:40
elle a l'air bien cette requete pourtant.
Une idée très très bête, mais peut-être mettre
Code :
|
pas taper, je sais que c'est assez ridicule comme idée
Marsh Posté le 20-06-2005 à 13:33:27
vien de faire quelques tests, et voila ce que j'obtient
Code :
|
me renvoi la derniere entrée de ma table a savoir battlefied
alors que
Code :
|
me renvoi "aucun resultat".
Marsh Posté le 20-06-2005 à 15:24:13
Djebel1 a écrit : elle a l'air bien cette requete pourtant.
|
ça revient au même que mon message ci-dessus
Marsh Posté le 21-06-2005 à 14:00:17
1. pbs dans ta requete : tu dois mettre le like pour CHAQUE champs que tu veux tester
2. pour eviter les pb de reconnaissance de variable dans une chaine :
- '%$expression[1]' => '%{$expression[1]}'
- mais le mieux est d'utiliser des ' et de sortir les variables
Marsh Posté le 21-06-2005 à 16:53:17
Bon je vais encore me repeter (c'est la vieillesse ) mais pourquoi ne pas utiliser des fonction déjà toutes faites par les dev de MSQL . c'est plus RAPIDE et FACILE.
voila un exemple:
Citation : $query = "SELECT num_produit, url, titre, description, MATCH(titre, description, url) AGAINST('$expression_recherche') AS score |
Les fields titre, description, url, doivent avoir un index FULL TEXT :
Citation : FULLTEXT KEY `fulltext_index` (`titre`,`description`,`url`) |
Ca marche trés bien et tous tes problèmes sont réglés, bien sur les resultats sont classé par ordre de pertinence
Marsh Posté le 23-06-2005 à 18:02:17
J'ai fais la modif que tu m'as conseillé et ça marche de temps en temps
quand je fais une recherche sur un mot ou deux ça marche, mais desfois non
exemple : Une recherche sur admin renverra les news postées par admin, alors qu'une recherche sur snarky renvoi "aucuns resultats".
Code :
|
Marsh Posté le 26-06-2005 à 09:25:47
snarky a écrit : J'ai fais la modif que tu m'as conseillé et ça marche de temps en temps |
T'es sûr que ça ne vient pas de ça :
Citation : La recherche du mot "MySQL" ne donne aucun résultat dans l'exemple précédent, car il est présent dans plus de la moitié des lignes. Ainsi, il est considéré comme un mot à ignorer (un mot avec une valeur sémantique nulle). C'est le comportement le plus optimal : un langage de requêtes ne doit pas retourner chaque ligne d'une table de 1 Go. |
http://www.nexen.net/docs/mysql/an [...] search.php
Sinon, je l'utilise et ça marche très bien
Marsh Posté le 18-06-2005 à 02:59:22
la compagnie.
Je me retrouve face a un petit dilemme et je n'arrive pas a trouver d'où peut bien venir le problème. J'ai codé un petit moteur de recherche(il marchai correctement) puis j'ai cherché a l'améliorer de maniere a ce qu'il puisse prendre :
Une expression -> "expression"
Un mot commencant par DebutDuMot -> DebutDuMot*
Un mot finissant par FinDuMot ->*FinDuMot
Plusieurs mot -> Mot1 Mot2
Après récuperation de mon champ ($search) issu de mon formulaire, j'effectue une série de test pour définir le type de recherche souhaité (cf ci-dessus). Jusque là tout marche. Mais une fois que je lui demande de m'afficher les résultats piouf! il se met a m'affichais n'importe quoi ou du moins un résultat completement faux.
si quelqu'un pouvait eclairer ma lanterne, cela me permettrais de corriger mon erreur
le site est donc http://snarky.free.fr
Il suffit d'effectué une recherche sur l'un des mots présents dans les news (titre, article, auteur)
et voici mon code.
Si vous trouvez qu'il n'y a pas assez de commentaires, je peux éditer et commenter chaqu'unes des lignes
Message édité par snarky le 18-06-2005 à 03:00:43