Il y a peu, j’ai eu l’occasion de mettre en place l’outil IBM OMNIFIND pour un client.
Cet outil permet d’exécuter des recherches textuelles dans une base de données DB2, dans des champs de type texte, mais aussi dans des documents contenus dans l’IFS comme des fichiers xml, json, pdf, doc, ….
Outre le fait qu’il soit multi plateforme (Windows, Linux ou IBMi) il s’intègre parfaitement dans les requêtes SQL existantes. Il permet de remplacer avantageusement les recherches avec LIKE en termes de performances et de souplesse.
Comment fonctionne-t-il ?
Dans un premier temps, il faut créer un index. Cet index pointe sur un champ d’une table ou d’un fichier physique.
Par exemple, si on souhaite faire une recherche sur libellé d’un produit dans le fichier ARTICLPF, on va exécuter les instructions suivantes :
CALL SYPROCS.SYSTS_CREATE (‘LIBFILE’ , ‘ARTICLT1’, ‘LIBFILEARTICEPF(LABELART)’ FORMAT TEXT’) ;
LIBFILE est la bibliothèque objet ou sont stockés l’index ARTICLT1 et la table ARTICLEPF.
LABELART est le champ sur lequel on fera la recherche
CALL SYPROCS.SYSTS_ALTER (‘LIBFILE’ , ‘ARTICLT1’, ‘UPDATE FREQUENCY (D(*) H(06) M(0)’);
CALL SYPROCS.SYSTS_UPDATE (‘LIBFILE’, ‘ARTICLT1’, ») ;
La création d’un index se fait en 3 étapes. La première va créer physiquement l’index.
La seconde permet de définir la fréquence de mise à jour de l’index.
Contrairement à un index classique, le chemin d’accès d’un index textuel n’est pas mis à jour dynamiquement.
Celui ci est mi à jour à intervalle régulier défini par cette étape.
L’index textuel est créé vide. La troisième étape permet de le remplir avec les données présentes dans le fichier ou la table parente. En fonction du volume de données, cette étape peut prendre plusieurs dizaines de minutes.