Recherche floue
Utilisez une recherche floue pour trouver des documents contenant des mots dont l'orthographe est similaire à celle du terme recherché.
Une requête de recherche de correspondance partielle recherche des séquences de caractères qui ne sont pas seulement exactes, mais également similaires au terme de requête. Utilisez le symbole du tilde (~) à la fin d'un terme pour effectuer une recherche de correspondance partielle. Par exemple, la requête suivante permet de trouver des documents contenant les termes analytique, analyse, analyse, etc.
analytics~Vous pouvez ajouter un paramètre facultatif pour spécifier le degré de similitude des résultats de la recherche par rapport au terme recherché. Spécifier une valeur supérieure ou égale à 0 et inférieure à 1. Vous devez faire précéder la valeur d'un 0 et d'une virgule décimale, par exemple 0.8. Une valeur proche de 1 permet d'obtenir des termes hautement similaires. Si vous ne spécifiez pas le paramètre, la valeur par défaut est 0.5
analytics~0.8Vous pouvez spécifier une recherche floue sur un terme mais pas sur une phrase. Pour appliquer la recherche floue à plusieurs mots d'une requête, vous devez appliquer un facteur de recherche floue pour chaque terme. Par exemple, la requête suivante permet de trouver des documents contenant des termes similaires à été et temps.
summer~0.7 time~0.7Exemple
Etape 1. Créez une table appelée LIVRES :
create table books (
isbn varchar(18) not null primary key,
author varchar(30),
story varchar(100),
year integer);Étape 2. Créez un index de recherche textuelle sur la colonne HISTOIRE :
db2ts "create index bookidx for text on books(story) connect to test";Étape 3. Importer des données dans le tableau :
insert into books values ('0-13-086755-1','John','The Blue Can',2001)
insert into books values ('0-13-086755-2','Mike','Cats and Dogs', 2000)
insert into books values ('0-13-086755-3','Peter','Hats on the Rack',1999)
insert into books values ('0-13-086755-4','Agatha','Cat among the Pigeons',1997)
insert into books values ('0-13-086755-5','Edgar','Cars Unlimited',2010)
insert into books values ('0-13-086755-6','Roy','Carson and Lemon',2008) Étape 4 : Mise à jour de l'index de recherche textuelle :
db2ts "update index bookidx for text connect to test"Étape 5. Effectuer une recherche floue à l'aide de la fonction CONTAINS :
select author, year, story from books where contains(story, 'cat~0.4') = 1Voici un exemple de résultat :
AUTHOR YEAR STORY
------------------------ ----------- -------------------------
John 2001 The Blue Can
Mike 2000 Cats and Dogs
Agatha 1997 Cat among the Pigeons
3 record(s) selected.Pour voir le score associé, lancez la requête suivante, modifiée pour plus de flou :
select author, year, story, integer(score(story, 'cat~0.3')*1000) as score
from books where contains(story, 'cat~0.3') = 1 order by score desc Voici un exemple de résultat :
AUTHOR YEAR STORY SCORE
------------------------------ ----------- -------
Agatha 1997 Cat among the Pigeons 32
John 2001 The Blue Can 17
Mike 2000 Cats and Dogs 17
Peter 1999 Hats on the Rack 1
Edgar 2010 Cars Unlimited 1
5 record(s) selected.Restrictions
- Les caractères spéciaux ne sont pas pris en charge dans les requêtes de recherche floue.
- Les termes des requêtes de recherche floues ne subissent pas de traitement linguistique (lemmatisation, expansion des synonymes et suppression des mots vides). Par conséquent, les requêtes de recherche floues ne trouvent pas les termes qui sont similaires à des synonymes.
- Si vous incluez des caractères génériques dans les termes de recherche floue, seule la recherche par caractères génériques est effectuée.