Recherche full-texte

WRInaute impliqué
Bonjour,
Je suis en train d'appliquer ce tutoriel : http://omiossec.developpez.com/mysql/fulltext/etudes/

J'ai donc créé mon code :

Code:
SELECT id, MATCH (titre, description , date) AGAINST ('comment créer un texte') AS  cpt
FROM article
ORDER BY cpt DESC

Ma table article contient : id | titre | description | date

mais ça marche pas ça m'affiche : Can't find FULLTEXT index matching the column list

Il faut apparemment que je créé un autre champ dans ma table genre d'après le tutoriel quand il a créé la table il a mis : FULLTEXT INDEX example_fulltext_plein(texte, commentaire, titre),

Ce que j'ai pas moi dans ma table !! Comment faire svp ?
 
WRInaute occasionnel
Requête SQL a exécuter :

ALTER TABLE article ADD FULLTEXT(titre, description , date);

En passant, la table "article" devrait être au pluriel puisqu'elle contient plusieurs articles (c'est une bonne pratique !)
 
WRInaute impliqué
Bonjour pOk3 merci pour votre réponse, d'accord pour le articles x).
A propos, quand j'exécute la requête alter Table, ceci va me créer un nouveau champs qui contient quoi ?
Et je dois exécuter cette requête chaque fois qu'un article est ajouté dans cette table ?

Merci.
 
WRInaute occasionnel
ça ne créé pas de nouveau champs, ça créé un index sur les champs listés !

La requête est exécutée une fois pour toute !
 
WRInaute accro
oui ca sera un index comme les autres. Par contre il faut savoir que les index fulltext sont très lourd.

Petite question tu es sur quelle base de données? mysql? tu utilise quel moteur : myisam ou innodb?
le fulltext est fonctionnel avec innodb uniqument sur mysql 5.6 il me semble. Donc si tu fais des essais en local fait bien attention qu'ensuite chez ton hébergeur le fulltext sera fonctionnel

Et si tu utilises le moteur myisam, il faut savoir que mysql a rendu innodb comme le moteur par defaut et que myisam n’est plus vraiment MAJ. l'avenir est donc à l'innodb depuis la reprise de mysql par oracle
 
Nouveau WRInaute
Salut,
Pour connaitre simplement la version de MySQL regarde sur PhpMyAdmin -> Variables -> Version.

Je te conseille d'utiliser "HeidiSQL" c'est un peu plus pratique que PhpMyAdmin et tu verras tes Index.
 
WRInaute accro
sigma2008 a dit:
Bonjour, oui je suis sous mysql (wamp) le moteur aucune idée j'ai posté mon code en haut !

Alors il faudrait que tu t'en soucis maintenant, car si tu test actuellement sur mysql 5.6 et que tu utilises le moteur innodb ça peut fonctionner en local mais si jamais tu as chez ton hébergeur une autre version ça ne fonctionnera plus et tu devras passer en myisam ou oublier ta recherche fulltext

Le choix du moteur est important pour le développement de ton projet. De mon côté j'ai abandonné la recherche full text, car je souhaitais utiliser le moteur innodb (nouveau moteur par défaut de mysql et plus pro) et ovh ne propose pas sur ses offres mutualisés mysql 5.6, même avec un SQL privé.

Donc avant de te lancer dans le fulltext faut déjà voir si tu seras en mesure de t'en servir.

PS : ton code plus haut ne donne aucune information sur le moteur que tu utilises
 
WRInaute impliqué
Merci beaucoup pour votre aide, quand j'ai lu "ou tu oublie la recherche fulltext" je me demande s'il y a une alternative ? par exemple chercher mot par mot dans la bdd quand l'utilisateur fait entrer une phrase !
 
WRInaute accro
Pour le moment n'envisageant pas plus de quelques milliers d'articles, pour ma part je vais me contenter d'un "like" , le temps d'être ensuite correctement référencé pour passer ensuite par le moteur de recherche fourni par GG.

Sur mutualisé, je n'ai malheureusement pas trouvé d'alternative, il me semble que pour utiliser les moteurs lucène, zend lucène , sphinx etc. il faut avoir un dédié. Ca nécessite une installation, (A confirmer)
Par contre je ne sais pas si c’est également le cas pour elasticsearch
 
WRInaute impliqué
Oui noren, je souhaite aussi utiliser le like que je maitrise bien, mais mon problème c'est avec les mots, comment vous faites par exemple si le client cherche "Histoire du film Segnieur des anneaux" alors que dans ma table j'ai seulement le mot segnieur dans le champ "titre" de la ligne id=20. si on utilise like il va chercher exactement la phrase "Histoire du film Segnieur des anneaux" et il va afficher le vide !
 
Nouveau WRInaute
Salut,
Il va falloir que tu fasses des "like" multiples en splitant ta chaine d'entrée. Pas top pour classer tes résultats et couteux en perfs. Si tes autres pages sont en cache et que le moteur n'est pas le centre de fonctionnement de ton site pourquoi pas.


Le moteur MyIsam n'évolue plus, mais il est stable. Si tu n'utilises pas le transactionnel et les autres fonctions apportées par InnoDB, tu peux toujours utiliser MyIsam. C'est juste un choix technologique ;)

Au pire tu peux mettre en place un système de Tags sur tes articles et te contenter de faire la recherche dessus.
 
WRInaute accro
Oui voilà il faut spliter la chaine

Après ce qui m'a dérangé avec le fulltext c’est que ca grossit fortement ta table et tes index.
sachant également que même si elle est nettement plus efficace que la recherche avec les like elle reste moins performante que d'autres moteurs de type sphynx, lucène cité plus haut.

Après comme le dit concombre, si ton moteur de recherche n'est pas le centre de ton site, et en fonction du nombre d'articles sur celui-ci le like peu faire l'affaire, le temps éventuellement que tu passes un jour sur un dédié par exemple ou que les serveurs mutualisés mettent à jour la versuion du Mysql. Ou tu peux aussi te contenter du Myisam. Mais pour ma part je n'aime pas trop l'idée pour un nouveau projet de partir avec un moteur qui sera enfin de compte "mis de côté". Et si un jour tu sens le besoin de faire des transactions ou de gérer les clés étrangères et les contraintes d'intégrité tu devras passer en innodb.
innodb verrouille également la ligne et non la table dans certain cas c’est plus performant. Notamment si ton site a beaucoup de visiteurs et que tu fais pas mal d'insert et d'update. Tu auras un gain de performance. Sachant également qu'innodb continue d'évoluer.
 
Discussions similaires
Haut