13.6 Recherche en texte intégral ( Full-text ) dans MySQL
13 Fonctions à utiliser dans les clauses SELECT et WHERE
Manuel de Référence MySQL 4.1 : Version Française
->Booléens de recherches en texte intégral . Recherche en texte intégral avec extension de requête . Restrictions avec la recherche en texte intégral . Paramétrage précis de la recherche en text intégral de MySQL . A faire dans la recherche Full-text
|
13.6.1 Booléens de recherches en texte intégral Depuis la version 4.0.1, MySQL peut aussi effectuer des recherchez en texte intégral
avec l'option
IN BOOLEAN MODE
.
mysql> SELECT * FROM articles WHERE MATCH (title,body) -> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE); +----+-----------------------+-------------------------------------+ | id | title | body | +----+-----------------------+-------------------------------------+ | 1 | MySQL Tutorial | DBMS stands for DataBase ... | | 2 | How To Use MySQL Well | After you went through a ... | | 3 | Optimizing MySQL | In this tutorial we will show ... | | 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... | | 6 | MySQL Security | When configured properly, MySQL ... | +----+-----------------------+-------------------------------------+
|
Cette requête recherche toute les lignes qui contiennent le mot
``
MySQL
'', mais qui
ne contient pas
le mot ``
YourSQL
''.Les recherches booléennes en texte intégral ont les caractéristiques suivantes :
-
Elle n'utilise pas le seuil de 50%.
-
Elles ne trie pas automatiquement les lignes par ordre de pertinence
décroissante. Vous pouvez le voir dans l'exemple précédent : la ligne
ayant la plus grande pertinence est celle qui contient ``
MySQL
'' deux
fois, mais elle est listée en dernier.
-
Elles peuvent fonctionner dans l'index
FULLTEXT
, même si c'est particulièrement
lent
.
Les recherches booléenne en texte intégral supporte les opérateurs suivants :
-
+
-
A signe + initial indique que le mot
doit être
présent dans la ligne retournée.
-
-
-
Un signe - initial indique que le mot
ne doit pas
être présent dans la ligne retournée.
-
(pas d'opérateur)
-
Par défaut, lorsque ni
+
, ni
-
n'est spécifié), le mot est optionnel,
mais les lignes qui le contiennent seront mieux cotées. Cela imite le comportement
de
MATCH() ... AGAINST()
sans l'option
IN BOOLEAN MODE
.
-
> <
-
Ces deux opérateurs servent à changer la contribution d'un mot à la
pertinence. L'opérateur
>
accroît la contribution, et l'opérateur
<
la décroît. Voir un exemple ci-dessous.
-
( )
-
Les parenthèses servent à grouper des mots en sous-expressions.
Les groupes de parenthèses peuvent être imbriquées.
-
~
-
Un signe tilde initial marque la négation, et fait que la contribution
du mot à la pertinence sera négative. Cet opérateur est pratique pour
marquer les mots ambigus. Une ligne qui contient un tel mot sera
classée bien plus bas, mais elle ne sera pas exclue, comme ce serait
le cas avec
-
.
-
*
-
Un astérisque est l'opérateur de troncature. Contrairement aux autres opérateurs,
il doit être en
suffixe
et non pas en préfixe.
-
"
-
Une phrase entre guillemets double (
'"'
) est recherchée littéralement,
telle qu'elle a été saisie
.
Les exemples ci-dessous illustrent quelques résultats de chaînes de
recherche avec les opérateurs :
-
'pomme banane'
-
Recherche les lignes qui contiennent au moins un de ces mots.
-
'+pomme +jus'
-
Recherche les lignes qui contiennent ces deux mots.
-
'+pomme macintosh'
-
Recherche les lignes qui contiennent le mot ``
pomme
'', mais
classe plus haut les lignes qui contiennent aussi ``
macintosh
''.
-
'+pomme -macintosh'
-
Recherche les lignes qui contiennent ``
pomme
'' mais pas ``
macintosh
''.
-
'+pomme +(>tatin <strudel)'
-
Recherche les lignes qui contiennent les mots
``
pomme
'' et ``
tatin
'', ou ``
pomme
'' et ``
strudel
'' (dans
n'importe quel ordre), mais classe ``
pomme tatin
'' plus
haut que ``
pomme strudel
''.
-
'pomm*'
-
Trouve les lignes qui contiennent des mots tels que
``
pomme
'', ``
pommes
'', ``
pommier
'', ou ``
pommeau
''.
-
'"deux mots"'
-
Recherche les lignes qui contiennent exactement la phrase ``
deux mots
''
(par exemple, les lignes qui contiennent ``
deux mots d'amour
'' mais pas
``
le mot deux
''). Notez que les caractères
'"'
qui entourent la phrase
délimitent la phrase. Ils ne délimitent pas la chaîne.
|