Section courante

A propos

Section administrative du site

 Langage  Elément  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Aviation
Base de données
Développement
Éditeur de texte
ERP (Enterprise Resource Planning) / PGI (Progiciels de Gestion Intégrés)
Site Web
Système d'exploitation
Tableur (chiffrier électronique)
Traducteur humain
Traitement de texte
Ville intelligente
Compilateur de langage de programmation
Éditeur de liaisons (Linkers)
Chercheur de bogue (BugFinder)
Chargement initial
Inscription d'un nouvel utilisateur
Noyau monolithique
Micro-noyau Microkernel
Noyau hybride
Noyau Exokernels
Noyau Nanokernel / Picokernel
Noyau Rump
Préface
Notes légal
Dictionnaire
Recherche

Construire un moteur de recherche avec MySQL

Lorsqu'un site prend de l'importance en terme de contenu et que le nombres de pages Web ne cessent d'augmenter, la nécessité de fournit un moteur de recherche pour le site Web devient primordial afin que l'internaute puisse trouver ce qu'il cherche vraiment. La première idée venant à l'esprit c'est d'utiliser directement la base de données MySQL pour y parvenir, toutefois, une recherche efficace n'est pas assez banal pour qu'on utilise une commande magique et que la base de données nous sortes les résultats les plus pertinents.

MySQL n'est pas un moteur de recherche

La base de données MySQL est une base de données relationnelle et donc pas un moteur de recherche. Bien qu'il fournit des outils pour effectuer des recherches dans les données qu'il contient, il est souvent préférable d'intégrer un vrai moteur de recherche si vous recherchez une solution complète. Voici les moteurs de recherches les plus populaires :

Nom Commentaires
Elasticsearch OpenSource, serveur basé sur Lucene
Endeca Propriété d'Oracle
Lucene OpenSource
Sphinx OpenSource
Solr OpenSource, serveur basé sur Lucene

Recherche Texte-plein (Full-text)

Le SQL de la base de données MySQL permet d'effectuer une recherche des textes en incluant la clause «WHERE» des «champ LIKE '%mot%'» ou «champ REGEXP '.*mot'» mais ceux-ci demeure relativement limité. De plus, il n'exploite pas les «INDEX» contenu dans la table, lequel rend le résultat de la recherche lent à obtenir. Ainsi, plus, il y a aura de contenu, plus le résultat sera long à obtenir.

Pour effectuer une recherche texte-plein (Full-Text), la technique que devrait utilisé serait plutôt d'ajouter un index FULLTEXT au champ dans lequel vous souhaitez effectuer une recherche et ensuite utiliser une requête comme ceci «MATCH(champ) AGAINST('mot')». Ainsi, vous auriez donc une requête comme ceci :

SELECT * FROM table WHERE MATCH(champ) AGAINST('mot');

L'avantage de la fonction «MATCH», contrairement à une fonction de recherche classique, tient du fait, qu'elle retourne un poids de pertinence. Ainsi, il sera possible de sortir des sortir les résultat les pertinents en premier avec une requête comme ceci :

SELECT * FROM table WHERE MATCH(champ) AGAINST('mot') ORDER BY MATCH(champ) AGAINST('mot') DESC;

Le mode Booléen

Par défaut, la fonction «MATCH» applique une recherche «IN NATURAL LANGUAGE MODE», soit une recherche par mode naturel du langage, où chaque mot de votre clause «AGAINST» sera appliqué à votre champ. Ce mode de recherche n'est malheureusement pas toujours pertinent et il ne tient pas compte du contexte dans lequel le mot se trouve. Ainsi, il existe le mode «IN BOOLEAN MODE» lequel permet des possibilités telles que l'exclusion de certain mot ou de calculer un poids plus égale pour tous les mots.

Voici la liste des opérateurs reconnus par le mode «BOOLEAN» de la recherche texte-plein (Full-text) :

Opérateur Description
(pas d'opérateur) Lorsqu'il n'y pas d'opérateur, il retour un poids de pertinence le plus élevé lorsqu'il correspond.
+ Cet opérateur permet d'indiquer que le mot doit être présent dans le texte.
- Cet opérateur permet d'indiquer que le mot ne doit pas être présent dans le texte.
@distance Cet opérateur permet d'indiquer que le mots recherchés devraient apparaître dans le texte à une certaine distance les uns des autres.
> < Cet opérateur permet d'augmenter ou de diminuer l'importance d'un mot dans la recherche.
( ) Cet opérateur permet de regrouper des mots en sous-expressions.
~ Cet opérateur permet de remplacer le poids de pertinence par le soustraction du mot.
* Cet opérateur permet d'indiquer un caractère pouvant remplacer tous les débuts de mot.
" Cet opérateur permet d'indiquer, que tous contenu situé à l'intérieur de 2 guillemets doit être recherché de façon exacte et sans interprétation.

Ajustement

La recherche à l'aide de la fonction «MATCH» est merveilleuse par sa simplicité mais les valeurs des variables de configuration par défaut ne sont pas nécessairement ajustés à vos besoins. Ainsi, par exemple ft_min_word_len et ft_max_word_len indiquant la longueur minimum et maximum d'un mot. Par défaut, la longueur minimum d'un mot est de 4 lettres, et dans de nombreuses situations, lorsque vous ferez des tests, vous constaterez que 3 seraient une valeurs plus appropriés.

Remarques

Exemple

L'exemple suivant permet de rechercher dans la table «cdmarticle», en indiquant que le mot «test» est facultatif mais que «fork» est obligatoire :

SELECT * FROM cdmarticle WHERE MATCH (contentText ) AGAINST ( '+fork test' IN BOOLEAN MODE )

PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mercredi, le 26 avril 2017