5.26. Recherche exacte sur des champs texte

Pour pouvoir effectuer une recherche exacte sur un champ donné de type texte, il faudra un analyseur moins permissif que celui installé par défaut, il est possible d’avoir un second analyseur sur le même champ, pour cela il faudra suivre cette procédure:

Prudence

il est important d’arrêter les services externals et scheduler et s’assurer qu’aucun workflow n’est en cours avant de démarrer cette procédure.

Prenant comme exemple le champ Title.

5.26.1. Ajout du nouvel analyseur

Pour cela, il faudra ajouter la déclaration du nouvel analyseur dans le fichier de configuration d’elasticsearch qui se trouve ici :

deployment/ansible-vitam/roles/vitam/files/elasticsearch-settings/elasticsearch-configuration.json

dans le bloc analyzer , nous ajoutons un nouvel analyseur nommé par exemple strict_title_analyzer, avec uniquement quelques filtres tels que:
  • lowercase
  • asciifolding
  • html_strip
nous pouvons enréchir l’analyseur avec un stemmer, par exemple pour le français, il existe 3 stemmers:
  • light_french
  • french
  • minimal_french

Dans la configuration par défaut de Vitam, nous utilisons le stemmer french qui est riche mais très permissif, il est recommandé de tester la configuration de l’analyseur en incluant d’autres filtres, ou stemmers, pour le cas de recherche strict, on peut tester minimal_french

Voici un exemple de configuration d’un analyseur à ajouter dans les paramètres dans le bloc analyzer du fichier de configuration d’elasticsearch :

"strict_title_analyzer": {
    "type": "custom",
    "tokenizer": "standard",
    "char_filter": [
        "html_strip"
    ],
    "filter": [
        "lowercase",
        "asciifolding"
    ]
}

Par convention Vitam, si l’analyseur de recherche exacte est positionné sur un champ nommé NomDuChamps:

  • la recherche classique se fait sur le critère de recherche « NomDuChamps »
  • la recherche exacte se fait sur le critère de recherche « NomDuChamps.Strict »

Voici un autre example d’un analyseur un peu plus permissif que le précédent et moins permissif que celui installé par défaut, celui-ci utilise le stemmer minimal_french:

"strict_title_analyzer": {
    "type": "custom",
    "tokenizer": "standard",
    "char_filter": [
        "html_strip"
    ],
    "filter": [
        "lowercase",
        "asciifolding",
        "minimal_french"
    ]
}

5.26.2. Modification du mapping

Après l’ajout du nouvel analyseur, pour pouvoir l’utiliser, il faudra le référencer dans le mapping elasticsearch.

Pour l’exemple du champ Title de la collection Unit, il faudra mettre à jour le mapping à travers le fichier

deployment/ansible-vitam/roles/elasticsearch-mapping/files/unit-es-mapping.json

"Title": {
    "type": "text",
    "analyzer": "default",
    "fields": {
        "Strict": {
        "type": "text",
        "analyzer": "strict_title_analyzer"
        }
    }
}

A l’issue, il faut lancer le playbook de déploiement de VITAM (et, si déployé, les extras) avec l’option supplémentaire --tags update_vitam_configuration.

5.26.2.1. Exemple

ansible-playbook ansible-vitam/vitam.yml -i environments/hosts.<environnement> --ask-vault-pass --tags update_vitam_configuration
ansible-playbook ansible-vitam-extra/extra.yml -i environments/hosts.<environnement> --ask-vault-pass --tags update_vitam_configuration

Cette procédure permettra d’appliquer la configuration sur une nouvelle installation, par contre, si on veut appliquer les modifications sur des tenants existants, il faudra une re-indexation à travers la procédure suivante.

5.26.3. Réindexation des indexes liés aux tenants

Pour pouvoir appliquer le nouvel analyseur et le nouveau mapping sur un tenant donné, il faudra re-indexer le contenu de l’index du tenant(s) en question.

Voir la documentation associée dans la rubrique : Réindexation

5.26.3.1. Exemple

ansible-playbook ansible-vitam-exploitation/reindex_es_data.yml -i environments/hosts.<environnement> --ask-vault-pass --tags unit -e "vitam_tenant_ids=<tenantsList>"

Prudence

La purge des anciens index n’est pas réalisée par cette procédure scriptée et est laissée à la charge de l’exploitant.

Prudence

Si un tenant fait partie d’un groupe de tenant, il faudra re-indexer l’ensemble des tenants

Prudence

Si à un moment donné on ne souhaite appliquer la réindexation qu’à une sous partie de tenants, lors de certaines MDV on fait des full réindexation (et donc le mapping sera finalement appliqué à l’ensemble).