Skip to content

Indexation et recherche

En premier lieu, il convient de préciser que Ewt ne fournit pas de fonction de recherche de dossiers intégrée. Dans la version actuelle, les recherches doivent être réalisées au moyen de scripts.

Par contre Ewt intègre des mécanismes d'indexation de dossiers et de maintien de ces index à jour.

Pour réaliser des opérations de recherche, les scripts sont donc libres de s'appuyer sur la base de données, sur les index disponibles, voire sur les deux à la fois.

La mise en place d'un script de recherche basé sur la base de données est une opération standard et ne nécessite pas de détails particuliers. La suite de ce document se concentre donc sur la configuration d'une application afin d'indexer ses dossiers et sur la recherche par index.

Configuration

La section search du fichier de configuration permet de spécifier les index disponibles dans l'application.

Il est possible de référencer ces index et de spécifier des règles de comportement au niveau de la description (fichier descript.xml).

Recherche par index

La recherche par index consiste à utiliser un système tiers d'indexation des données et de recherche. Ewt intègre la librairie Apache Lucene pour effectuer ce type de recherche, mais il est prévu d'étendre ce type de recherche à d'autres outils externes (ElasticSearch, Meilisearch, etc.)

En pratique, la mise en place de ce type de recherche nécessite de configurer l'application de la façon suivante:

  • Les paramètres d'index doivent être spécifiés au niveau d'une section search.index dans le fichier de configuration de l'application. Le moteur autorise une application à avoir plusieurs index. Ainsi on pourra utiliser un index pour les dossiers de l'application et d'autres index pour des données spécifiques (des adresses, des coordonnées, etc.)
  • Au niveau de la description (fichier descript.xml), on indiquera pour chaque modèle le nom de l'index à utiliser
  • Par défaut tous les champs d'un dossier pour lequel un index est déclaré sont indexés. Il est toutefois possible d'indiquer de ne pas indexer du contenu au moyen de l'attribut index="false". La valeur de l'attribut est valable pour tous les éléments fils.

Indexation par le moteur

Ewt déclenche automatiquement une indexation de dossier lors de la sauvegarde explicite (c'est-à-dire par exemple lorsque l'utilisateur clique explicitement sur le bouton "Enregistrer"), lors de la fermeture et lors d'un changement d'état d'un dossier, que l'opération soit réalisée via un script ou via une action de l'utilisateur. L'index est également mis à jour en cas de suppression de dossier.

Le noms de champs au niveau de l'index sont notés selon la syntaxe <modelName>.<groupName>.<fieldName>, où modelName est le nom du modèle, groupName le nom du groupe et fieldName le nom du champ.

Il se peut que les mises à jour d'index ne soient pas immédiatement prises en compte lors des recherches. Cela dépend de la solution de recherche utilisée et des paramètres de cette dernière.

Pour que le moteur puisse indexer correctement les données, il convient de préciser comment il doit s'y prendre. En particulier, il y a lieu de spécifier le nom d'index (indexname) et les options d'index via les attributs indexstore et indexmode à définir au niveau des éléments model, group et field de la descript.

indexname

Cet attribut indique le nom de l'index sur lequel référencer le dossier. Dans la version actuelle, l'attribut ne peut être défini qu'au niveau du modèle.

Le nom d'index doit être déclaré dans le fichier de configuration de l'application: ce dernier doit contenir une section search.index dont l'attribut name correspond au nom d'index.

indexmode

Cet attribut permet de spécifier comment la valeur doit être indexée. Plusieurs modes sont possibles:

token
La valeur n'est pas indexée telle quelle, mais elle est décomposée en tokens et ce sont ces derniers qui sont indexés. Par exemple, une valeur "ceci est un exemple" est décomposée en "ceci", "est", "un" et "exemple". Seuls les tokens "ceci" et "exemple" sont indexés car les autres termes ne sont pas suffisamment significatifs.
token:<analyzer>

Ce mode joue le même rôle que token, mais ici le terme analyzer est à remplacer par le type d'analyzer à utiliser, par exemple token:fr pour une tokenisation adaptée au français, token:en pour une tokenisation adaptée à l'anglais, etc. Les analyzers disponibles dépendent du moteur d'indexation choisi.

Pour le moteur lucene intégré à Ewt, les analyzers reconnus sont:

  • ar: Arabic
  • bg: Bulgarian
  • bn: Bengali
  • br: Brazilian
  • ca: Catalan
  • cjk: Chinese, Japanese, and Korean
  • ckb: Sorani
  • cz: Czech
  • da: Danish
  • de: German
  • el: Greek
  • en: English
  • es: Spanish
  • et: Estonian
  • eu: Basque
  • fa: Persian
  • fi: Finnish
  • fr: French
  • ga: Irish
  • gl: Galician
  • hi: Hindi
  • hu: Hungarian
  • hy: Armenian
  • id: Indonesian
  • it: Italian
  • lt: Lithuanian
  • lv: Latvian
  • ne: Nepali
  • nl: Dutch
  • no: Norwegian
  • pt: Portuguese
  • ro: Romanian
  • ru: Russian
  • sr: Serbian
  • sv: Swedish
  • ta: Tamil
  • te: Telugu
  • th: Thai
  • tr: Turkish
  • keyword: indexation de mot-clé
  • email: indexation d'adresse e-mail
  • simple: indexation de donnée simple
  • whitespace: découpage sur les espaces
  • classic: indexation standard
  • standard: indexation standard
raw
La valeur est indexée dans son intégralité, c'est-à-dire qu'elle n'est pas analysée mais simplement indexée telle quelle. On utilisera ce mode pour les identifiants, les champs qui contiennent un mot unique ou une série de mots inséparables les uns des autres (un nom de famille ou de localité par exemple).
ident
Identique à raw, mais plus adapté aux champs identifiants.
no
La valeur n'est pas indexée.
indexstore

Cet attribut peut être spécifié au niveau des éléments model, group et field. Il vaut pour toute la sous-arborescence de l'élément sur lequel il est spécifié, mais il peut être surchargé au niveau d'un élément fils.

Il permet d'indiquer si la valeur du champ doit être sauvée dans l'index. Les valeurs possibles sont donc:

yes

Indique d'enregistrer la valeur dans l'index.

Par défaut, l'index n'enregistre pas la valeur complète d'un champ, mais il indexe les tokens qui la composent, c'est-à-dire les mots d'un texte (en ignorant certains mots peu significatifs). Le fait d'activer le mode store force l'index à enregistrer la valeur complète du champ. Cela est nécessaires pour les clés primaires ou lorsque l'on veut afficher des informations détaillées sur la façon de calculer la pertinence de résultat.

no
Indique de ne pas enregistrer la valeur dans l'index

Les identifiants de dossiers (c.-à-d. les primary keys) sont automatiquement indexés avec les options indexstore="yes" et indexmode="raw".

Note concernant la sécurité

Lors d'une indexation de dossier effectuée par le moteur, les données ne sont pas enregistrées dans l'index, à l'exception de l'identifiant de dossier lui-même.