Extensions et tutorials gratuits disponibles sur internet pour Dreamweaver. PHP et ASP. Classement thématique. Blog référencé par Adobe Communauté Dreamweaver.

Dreamweaver gratuit

Structure et paramétrage de la base – tutorial moteur de recherche full text multi-critère avec Dreamweaver

18 juin 2009 | Posté par caroder à 18:54

Bookmark and Share

Pour ce tutorial, nous allons imaginer que réalisons une application pour une librairie qui souhaite mettre en ligne son catalogue d'ouvrages. Un même auteur pouvant publier différents ouvrages dans différentes maison d'éditions, nous aurons une table contenant les maisons d'édition, une table contenant les auteurs et une table contenant les ouvrages.

Nous souhaitons que notre future interface de recherche puisse rechercher en full text sur :

  • Le titre : "A la recherche du temps perdu" = "recherche temps perdu"
  • L'auteur : "Marcel Proust" = "Proust Marcel"
  • Le descriptif
  • La maison d'édition : "Le Serpent à Plume" = "plume serpent'

Nous devrons donc activer les index full text sur ces champs. Quelques schémas valant mieux que des longs discours, voici les captures écrans de la création des tables (cliquez sur les images pour les agrandir).

Pour la table editeurs :

base1

Pour la table auteurs :

base2

et pour la table ouvrages (la capture est scindée en 2 pour visualisation) :

base

base3bis

Très IMPORTANT : vous devez impérativement indiquer, lors de sa création, pour chacune des tables contenant des index full text que le moteur de stockage est de type MyISAM. Ce dernier est le seul moteur de stockage compatible avec les index full text.

base4

Pourquoi avons-nous créé les champs code_edit et code_aut de type varchar ?

Ces champs ne répondent pas à des impératifs techniques du PHP ou de MySQL. Cependant nous souhaitons pouvoir suivre les requêtes de nos utilisateurs dans notre interface de statistiques, notamment Google Analytics. Si nous utilisions les champs id_aut et id_edit comme clés étrangères, nous aurions beaucoup de difficultés à suivre nos statistiques de recherche en multicritère (les "catégories" dans GA) puisque les paramètres seraient "1", "2", "3", etc, ceci répété en autant de tables que de paramètres. Nous pallions au défaut d'utilisation des ressources du moteur MySQL (la jointure entre tables sur des types varchar étant plus gourmande que sur des type int) en activant l'index afin d'accélérer le traitement des requêtes et d'éviter la saturation des serveurs.

Pour mieux comprendre de quoi je parle, voici une capture écran du suivi des requêtes d'un moteur de recherche intrasite dans Google Analytics.

ga1

Voici donc les requêtes SQL correspondant à la création de ces tables :

CREATE TABLE IF NOT EXISTS `editeurs` (
  `id_editeur` int(11) NOT NULL AUTO_INCREMENT,
  `nom_editeur` varchar(255) NOT NULL,
  `code_edit` varchar(4) NOT NULL,
  PRIMARY KEY (`id_editeur`),
  KEY `code_edit` (`code_edit`)
) ENGINE= MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `auteurs` (
  `id_auteur` int(11) NOT NULL AUTO_INCREMENT,
  `nom_auteur` varchar(255) NOT NULL,
  `code_aut` varchar(4) NOT NULL,
  PRIMARY KEY (`id_auteur`),
  KEY `code_aut` (`code_aut`)
) ENGINE= MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `ouvrages` (
  `id_ouvrage` int(11) NOT NULL AUTO_INCREMENT,
  `titre` varchar(255) NOT NULL,
  `descriptif` text NOT NULL,
  `date_parution` date NOT NULL,
  `code_edit` varchar(4) NOT NULL,
  `code_aut` varchar(4) NOT NULL,
  PRIMARY KEY (`id_ouvrage`),
  KEY `code_edit` (`code_edit`,`code_aut`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

NB : la création de ces tables est effectuées uniquement en vue de ce tutoriel et n'est pas optimisée pour d'autres fonctionnels.

Sommaire du tutorial

  1. Introduction : concept de full text
  2. Structure et paramétrage de la base
  3. Création de la page de recherche
  4. Page de résultat : fonctionnement multi-critère
  5. Implémentation du full text

Commentaires

    bug " dans sql

    Bonjour,
    tout d'abord merci ce tuto est vraiment nickel, aucun soucis pour l'adapter à mes besoins, par contre une question, si dans la partie descriptif j'utilise des " entre mes `` cela m’empêche d'insérer mes bases dans mysql et me renvoie une erreur, exemple :
    #1064 - Erreur de syntaxe près de 's infos which you are aiming (owner'name and AuthID). It also allows to create a' à la ligne 57
    ligne 57:
    (NULL, 'td18', '1.0 CS', 'au01','BLAbla, V1.0 CS, to/from a specified player, a team or all players. To remove money, simply use the argument "-" before the money amount (f.e.: amx_money jack -200).
    Note: You can enable the AMX logs by uncommenting the #define USE_LOGS.', 'jd02','EN/FR', 'ed01'),

    Voilou et si je supprime les guillemets au niveau de "-" cela marche, donc ma question est comment je fais pour insérer des ' et " dans mes sql.

    Encore merci

    Posté par desbass | 13 juillet 2012 à 14:00
 

Poster un commentaire