Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2011, 10h28   #1
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
Par défaut Les solutions pour mettre en place un moteur de recherche

Bonjour,

Je recherche des solutions afin de mettre en place un moteur de recherche sur un site, avec une énorme contrainte: le serveur est mutualisé, donc impossible d'installer une extension php ou autre, je dois trouver des solutions avec la version php 5.2 standard et mysql 5...

J'ai déjà trouvé 2 "solutions":

- Recherche dans Mysql avec des LIKE
- Recherche dans Mysql avec des champs FULLTEXT et MATCH

Vous allez me dire que c'est pas fameux fameux...j'ai aussi trouver une extension php mais qui n'est pas installé par défaut, donc impossible de l'exploiter...:

- http://php.net/manual/fr/book.mnogosearch.php

Question 1: Laquelle des 2 premières solutions est la "meilleure" entre des LIKE ou FULLTEXT?

Question 2: Est-ce que PHP offre pas un genre d'extension type mnogosearch MAIS installé par défaut?

Question 3: Des autres idées? avis?

Merci d'avance
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h35   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
le FULLTEXT c'est très bien pour faire de la recherche de texte, qu'est ce qui te bloque ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h49   #3
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
Bonjour,

Déjà merci pour votre réponse

J'ai pu lire à plusieurs endroits que le FULLTEXT était pratique, mais devenait vite très lent une fois atteint un gros volume de données.

La question est: Combien vaut "gros"? 100'000 enregistrements? 1'000'000?

Tout cela dépend de ma table bien sûr, prenons un exemple, voici une table:

- id INT
- content1 TEXT
- content2 TEXT
- content3 TEXT
- option1 VARCHAR 128
- option2 VARCHAR 128
- option3 VARCHAR 128

Admettons que ma table contient 250'000 enregistrement avec de gros texte dans content1, 2 et 3, la recherche FULLTEXT sera acceptable niveau performance?

Et niveau performance si on joint encore deux-trois tables?

Merci
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h53   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
t’inquiète pas c'est fait pour
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 11h08   #5
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
Dans tout les cas la méthode FULLTEXT est plus performante que des LIKE?

EDIT: Aussi FULLTEXT ne fonctione que sur les table MyISAM, une solution pour les tables InnoDB?

Merci pour votre réponse.
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 11h23   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par nesswaw Voir le message
Dans tout les cas la méthode FULLTEXT est plus performante que des LIKE?
oui

Citation:
Envoyé par nesswaw Voir le message
EDIT: Aussi FULLTEXT ne fonctione que sur les table MyISAM, une solution pour les tables InnoDB?
si tu veux absolument du InnoDB utilise LIKE pourquoi poser la question ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 11h27   #7
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
C'est pour savoir si d'autres solutions existent

Dans ce cas je vais prendre FULLTEXT sur une table MyISAM.

Encore une petite question qui sort du contexte...Quelle est la différence entre MyISAM et InnoDb? C'est un peu une question de goût? vous préférez Audi ou VW

Merci
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 11h31   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par nesswaw Voir le message
C'est pour savoir si d'autres solutions existent

Dans ce cas je vais prendre FULLTEXT sur une table MyISAM.

Encore une petite question qui sort du contexte...Quelle est la différence entre MyISAM et InnoDb? C'est un peu une question de goût? vous préférez Audi ou VW

Merci

MyISAM est plutot pour la recherche de texte (grace FULLTEXT)
InnoDB fait du transactionnel (ce que ne fait pas MyISAM)

donc c'est pas une question de gouts mais de fonctionnalités
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 12h03   #9
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
Ok merci pour les réponses.

J'ai fait un test, j'ai ajouter un FULLTEXT sur plusieurs champs d'une table, avec les données déjà existantes, si je fait une recherche, il ne trouve rien.

Je recrée une nouvelle table avec direct les index, j'insère des données et la je peux rechercher sans problèmes.

J'en conclut donc qu'il faut que je ré-index ma table pour qu'il prennent en compte mes données, comment je fait ça?

Merci
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 12h05   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
tu dois avoir au moins 4 entrées je crois

EDIT : visiblement c'est 3

http://dev.mysql.com/doc/refman/5.0/...xt-search.html
Citation:
Assurez-vous d'insérer au moins trois lignes, et même plus.
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 12h20   #11
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Le choix entre MyISAM et InnoDb, tout dépend de tes contraintes.
  • MyISAM est plus rapide et gère FULLTEXT.
  • InnoDb est plus puissant car il gère les relations et les transactions.

A mon avis tout dépend de tes besoins.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 13h01   #12
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
Citation:
Envoyé par stealth35 Voir le message
tu dois avoir au moins 4 entrées je crois

EDIT : visiblement c'est 3

http://dev.mysql.com/doc/refman/5.0/...xt-search.html
Oui oui j'ai plus de 10'000 entrées...et il ne trouve rien, je dois ré-indexer?
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 13h03   #13
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
Citation:
Envoyé par okoweb Voir le message
Le choix entre MyISAM et InnoDb, tout dépend de tes contraintes.
  • MyISAM est plus rapide et gère FULLTEXT.
  • InnoDb est plus puissant car il gère les relations et les transactions.

A mon avis tout dépend de tes besoins.
Je ne peux pas avoir de FOREIGN KEY avec un MyISAM? Cela va me poser problème, j'ai des tables lié ou je devrais faire des recherches....
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 14h05   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par nesswaw Voir le message
Je ne peux pas avoir de FOREIGN KEY avec un MyISAM? Cela va me poser problème, j'ai des tables lié ou je devrais faire des recherches....
non on peut pas, alors après y'a des astuces en faisant des dumps vers des tables MyISAM via des Triggers mais bon ...
tu vas devoir rester sur le LIKE
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 15h39   #15
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
En testant je peux créer des tables MyISAM avec des FOREIN KEY et des FULLTEXT...

Est-ce que je confond quelque chose? ou alors montrez moi un exemple pas possible.

EDIT: Je ne comprend pas tout, j'ai fait le 1er exemple de la doc de Mysql => http://dev.mysql.com/doc/refman/5.0/...xt-search.html

Si je recherche le mot "database" comem dans l'exemple ça fonctionn bien...
Par contre si je test avec le mot "mysql", "after", "never" il n etrouve rien, alors que ces mots existent...

Si je recherche "tutorial" ou "DBMS" la il trouve....

Pourquoi il trouve pas tout???

Merci pour vos éclaircissement
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 15h48   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
tes INDEX se font ?

EDIT : t'es peu être en case sensitive collation_cs (au lieu de _ci)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 15h52   #17
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
Apparemment oui, voici mon code sql pour CREATE:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
CREATE  TABLE IF NOT EXISTS `test` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
  `title` VARCHAR(64) NULL DEFAULT NULL ,
  `content` TEXT NULL DEFAULT NULL ,
  `fk_idLocalite` INT(10) UNSIGNED NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_localite1` (`fk_idLocalite` ASC) ,
  CONSTRAINT `fk_localite1`
    FOREIGN KEY (`fk_idLocalite` )
    REFERENCES `localite` (`idLocalite` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
EDIT: Ma base est en utf8_general_ci et mes tables aussi

EDIT 2: Heu apparemment non, si j'insère une entrée je peux mettre n'importe quoi dans mon champ qui est censé être une clé étrangère...
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 16h01   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
c'est le résultat de ton show create table ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 16h09   #19
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 117
Points : 25
Points : 25
C'est la requête que j'ai lancer via phpmyadmin pour créer ma table...il la crée sans problème, mais par contre j'ai vu qu'il ne gérait quand même pas les relations...

Du coup dommage, je vais faire autrement, par contre j'ai toujours ce problème de recherche avec FULLTEXT qui me trouve pas tout...

Une idée pour ça?
nesswaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h14.


 
 
 
 
Partenaires

Hébergement Web