« Je veux trouver tous les documents qui parlent du tango ! J’en ai besoin rapidement ! Je peux le faire ? »
Ok, mais d’abord respirez !
La recherche de mots-clés dans les documents 4D Write Pro nécessite simplement l’ajout d’un nouvel attribut d’indexation dans chaque document. Cela n’est pas fait par défaut car ce type de recherche n’est pas souvent nécessaire et cela n’aurait pas de sens d’augmenter systématiquement la taille des documents. Cependant, lorsqu’il est nécessaire, ce type d’index est très facile à construire.
« Le tango est une danse traditionnelle argentine ». Notre objectif est de créer une liste de mots à partir du contenu des documents. Cela se fait principalement à l’aide de deux commandes :
- WP Get text – retourne le texte brut du document
- Get text keywords – remplit un tableau de texte avec les mots du texte fourni. Une fois ce tableau rempli, il suffit de l’ajouter comme attribut de l’objet document de 4D Write Pro et de l’utiliser comme cible pour les recherches par mots clés.
Regardons de plus près les détails.
Ne manquez rien dans le document
WP Get text renvoie le contenu de la cible sous forme de texte brut. La cible peut être une plage donnée ou un document entier. Si vous passez un document comme argument, seul le texte du corps du document sera renvoyé. Les en-têtes et les pieds de page seront ignorés, ce qui n’est probablement pas souhaitable. Comme chaque section d’un document peut avoir ses propres en-têtes et pieds de page, vous devrez les parcourir en boucle et lire leur contenu. Veillez à prendre en compte toute variante (par exemple, première page, page de droite, page de gauche).
Placer le texte dans un tableau
Get text keywords remplit un tableau sur la base du contenu du texte source. La seule subtilité ici est de ne pas oublier le paramètre optionnel étoile (*). Il permet de ne remplir le tableau qu’avec des valeurs distinctes des mots du texte. Cela évite un « poids » inutile 🙂
Créer l’index dans le document
Le nom de l’attribut qui contiendra l’index est à votre discrétion, cependant, il est fortement recommandé de le préfixer par un trait de soulignement pour éviter tout conflit potentiel avec des attributs publics existants (ou à venir) des documents 4D Write Pro (Exemple : « _keywords ».)
Bien sûr, cette indexation doit être faite à chaque fois que les documents sont modifiés, mais c’est une tâche vraiment très rapide et qui ne causera aucun ralentissement notable pour les utilisateurs.
Indexer l’index !
Pour que les requêtes utilisant l’index de mots-clés soient rapides et efficaces, le document lui-même doit, bien sûr, être indexé. Il n’y a pas lieu de s’inquiéter de la taille de l’index. Seuls les attributs exposés (publics) sont indexés, il ne faut donc s’attendre qu’à un très léger surdimensionnement. Par exemple, il n’est pas nécessaire de créer un nouveau champ d’objet qui ne servirait qu’à cela. Cela serait totalement inutile et l’espace occupé serait plus important que l’utilisation d’un objet existant (c’est-à-dire le document 4D Write Pro lui-même).
Dans le cas des champs d’objet, « Automatique » signifie « cluster b-tree », ce qui est parfait pour les lettres commerciales ou les documents similaires.
Faire des requêtes sur cet index
Les requêtes classiques doivent être effectuées « par attribut ». N’oubliez pas que l’attribut est une collection, vous devez donc ajouter des crochets ouvrants et fermants [ ] pour indiquer à 4D que la recherche doit être effectuée dans cette collection. Par exemple :
QUERY BY ATTRIBUTE([SAMPLE]; [SAMPLE]WP; "_keywords[]" ; = ; $val)
Les requêtes ORDA s’effectuent selon le même principe :
$entitySel:=ds.SAMPLE.query("WP._keywords[] = :1" ; $val)
Conclusion
Si dans vos documents, ce type d’indexation n’a pas été prévu dès le départ et que le besoin se fait sentir, il n’est jamais trop tard ! Apply to selection de la méthode d’indexation fera parfaitement l’affaire. Les recherches peuvent également être combinées pour prendre en compte plusieurs mots à la fois (tous les mots) ou séparément (au moins un des mots). Cela vous permettra (et surtout aux utilisateurs de vos bases de données) de trouver très rapidement des textes en fonction des mots qu’ils contiennent.
Vous disposez maintenant de deux méthodes pour créer (et peut-être supprimer) l’index plein texte ! Elles peuvent être utilisées à partir de 4D V17. Consultez cet extrait de code que vous pouvez utiliser dans votre propre application !