Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

IBM i : Recherche textuelle en SQL

Par Florian MASCARO Publié le 01/06/2016 à 09:32:16 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Introduction

Nous aborderons dans cet article la technologie OmniFind Text Search, qui est une solution de recherche sur IBM i. Cette solution permet de rechercher des textes, via SQL, dans une table DB2.

Le serveur OmniFind est un moteur de recherche basé sur le contexte.Il prend en charge des fonctions de recherche avec une correspondance partielle et avec un contexte linguistique.

Par exemple, si nous recherchons le terme "chats", la recherche pourra isoler les résultats ayant les termes "chaton", "chat", "chats" dans les enregistrements.

Les applications qui peuvent bénéficier de cette technologie sont nombreuses.

Nous verrons dans cet article 2 fonctions SQL : CONTAINS et SCORE.

Configuration système requise

Les serveurs de recherche sont disponibles sur des serveurs Linux, Windows ou IBM i. Ces serveurs font partie du produit DB2 Accessories Suite for z/OS (5655-R14)

La configuration logicielle minimum est la suivante :

  • 5770JV1 - IBM Developer Kit for Java

  • Pilote DB2 Universal Java Driver installé et configuré sur le serveur de recherche de texte

  • Pour l'IBM i, les programmes suivants doivent être installés :

    • 5770SS1 Option 30 Qshell

    • 5770SS1 Option 33 IBM i Portable Application Solutions Environment (IBM i PASE)

    • 5770SS1 Option 39 International Components for Unicode

    • Le dernier groupe de correctifs de programme provisoire (PTF) pour IBM DB2 for i est appliqué au système.

Types de données pris en charge

Les données des colonnes de texte que nous pouvons indexer et interroger peuvent être des données binaires ou des données de type caractères. Vous retrouverez la liste des types de données pris en charge ci-dessous :

  • BINARY

  • VARBINARY

  • BLOB

  • CHAR FOR BIT DATA

  • VARCHAR FOR BIT DATA

  • CHAR FOR SBCS DATA ou FOR MIXED DATA

  • VARCHAR FOR SBCS DATA ou FOR MIXED DATA

  • CLOB

  • DBCLOB

  • GRAPHIC

  • VARGRAPHICxsws

  • XML

SQL

La fonction CONTAINS

Vous retrouverez ci dessous une requête simple permettant de faire une recherche sur le terme 'developpeurs'.

SELECT name
FROM job 
WHERE CONTAINS(name, 'developpeurs') = 1

NAME                                 
------------------------------ 
Developpeur Java                       
Developpeurs Cobol 
Developpeur PHP
                         
  3 record(s) selected.
    

La fonction CONTAINS recherche dans l'index de recherche de texte pour l'argument de recherche spécifié et retourne si oui ou non une correspondance a été trouvée .

Dans l'exemple précédent , la recherche renvoie non seulement les occurrences du terme «developpeur» mais aussi du terme «developpeurs».

Pour trouver les lignes qui contiennent une combinaison de mots , il faut utiliser les opérateurs AND, OR et NOT pour inclure ou exclure des documents; AND étant la valeur par défaut pour combiner plusieurs termes . La requête suivante retourne les lignes qui contiennent à la fois les termes «developpeur» et «java» ou "php" dans la colonne name.

SELECT name
FROM job 
WHERE CONTAINS(title, 'developpeur AND (java OR php)') = 1 
 
NAME                                 
------------------------------ 
Developpeur Java                        
Developpeur PHP
                         
  2 record(s) selected.

Il est aussi possible de rechercher une expression exacte en mettant les termes de recherche entre guillements.

SELECT name
FROM job 
WHERE CONTAINS(title, '"developpeur java"') = 1 
 
NAME                                 
------------------------------ 
Developpeur Java                        
                         
  1 record(s) selected.

La recherche peut être aussi effectué à l'aide de métacaractère (wildcards) pour retourner des documents. Au niveau des performances, il est conseillé d'éviter l'utilisation des métacaractères au début d'un terme de recherche sans l'utilisation de l'argument RESULTLIMIT que nous verrons un peu plus tard.

SELECT name
FROM job 
WHERE CONTAINS(name, 'cob*') = 1

NAME                                 
------------------------------                      
Developpeurs Cobol 
                         
  1 record(s) selected.

Afin de limiter le nombre de résultat retourné, il est possible d'ajouter l'argument 'RESULTLIMIT' :

SELECT name
FROM job 
WHERE CONTAINS(name, 'developpeur', 'RESULTLIMIT=2') = 1

NAME                                 
------------------------------ 
Developpeur Java                       
Developpeurs Cobol 
                         
  2 record(s) selected.

Vous retrouverez ci-dessous un petit résumé des termes qu'il est possible de mettre :

  • Un mot simple

    • en minuscules ou en majuscules, l'indexation n'est pas sensible à la casse

    • au singulier ou au pluriel

    • avec ou sans les accents

  • Un tiret (-) suivi d'un mot : permet d'exclure un mot

  • Deux mots : Par défaut, l'opération AND sera faite. Si des guillemets sont utilisés, c'est la chaîne exacte qui est recherché.

  • Opérateurs

    • AND ou +

    • NOT ou -

    • OR

  • * : permet de rechercher tous les mots contenants le terme de recherche

  • \ : pour échapper les caractères (\+) ou (\-) par exemple

La fonction SCORE

La fonction SCORE permet de récupérer les résultats en fonction de la pertinence. Elle détermine dans quelle mesure un résultat correspond au terme de recherche par rapport aux autres résultats. Le score d'un document est compris entre 0 et 1 et prend en compte le nombre d'occurences des termes recherchés.

SELECT name
FROM job 
WHERE CONTAINS(name, 'developpeur OR php') = 1
ORDER BY SCORE(name, 'developpeur OR php') DESC

OU

SELECT name,INTEGER(SCORE(name,'developpeur OR php') * 100) AS relevance
FROM job 
WHERE CONTAINS(name, 'developpeur OR php') = 1
ORDER BY relevance DESC


NAME                                 
------------------------------ 
Developpeur PHP
Developpeur Java                       
Developpeurs Cobol 
                         
  3 record(s) selected.

Conclusion

Comme nous avons pu le voir, la recherche via OmniFind permet d'avoir des résultats pertinents. Vous pouvez maintenant commencer à développer un vrai moteur de recherche alliant performance et pertinence, quelque soit la langue.

Sources

http://www.ibmsystemsmag.com/CMSTemplates/IBMSystemsMag/Print.aspx?path=/ibmi/administrator/db2/OmniFind-Can-Help-Improve-Your-Search-Technique

http://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_72/rzash/rzashkickoff.htm

http://www.volubis.fr/news/liens/courshtm/XML/OMNIFIND.HTM

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels