Le module co-deduplicate est un module qui va opérer le dédoublonnage de notices en passant par le moteur de recherche Elasticsearch.
co-deduplicate
reçoit les notices préformatées au format JSON et interroge ElasticSearch selon une hierarchie de règles de correspondance prédéfinie.
Lorsque pour un document, un ou plusieurs doublons sont trouvés, l'objet documentaire au format JSON est enrichi avec les identifiants des documents doublons. Pour chaque doublon, la liste des règles effectuant la correspondance est mémorisée.
Identique à la structure des champs de sortie du module co-formatter.
2 champs sont ajoutés au JSON d'entrée :
sourceUidChain
: la liste des doublons trouvés, sous la forme d'une suite d'identifiants séparés par un caractère délimiteur.duplicates
: la liste des noms de règles ayant amené au dédoublonnage
Les champs utilisés pour le dédoublonnage ne sont désormais plus normalisés en amont : le module co-normalizer est à présent obsolète.
Ces champs sont maintenant normalisés à l'indexation, grâce aux fonctionnalités d'analyse de texte du moteur de recherche Elasticsearch. Sont notamment utilisés les normalizers, les token filters et les character filters. Pour plus de détails, consulter le mapping utilisé par le présent module.
Il résulte de ce mécanisme, que les valeurs normalisées de tous ces champs ne sont pas stockées en clair, mais seulement prises en compte lors de l'interrogation.
Si vous souhaitez tester les différents filtres, il convient d'interroger Elasticsearch directement.
Prenons en exemple la normalisation d'un titre, qui est spécifié ainsi dans le mapping :
"title:normalizer":{
"type": "custom",
"char_filter":["whitespace_remove","punctuation_remove"],
"filter":["lowercase","my_asciifolding"]
}
Pour le simuler la normalisation d'un titre, il faudra donc envoyer la requête à Elasticsearch la requête suivante :
POST /records/_analyze
{
"tokenizer": "keyword",
"char_filter":["whitespace_remove","punctuation_remove"],
"filter":["lowercase","my_asciifolding"],
"text": "c'est un bien joli titre que voilà !"
}
Ces règles sont numérotées, nommées et externalisées dans le fichier de configuration [rules.json]. Ces règles sont ensuite exécuté selon des scénarios prédéfinis en fonction du type de document.
Dépendances système : * NodeJS 14.0.0+ * ElasticSearch 7.0.0+
Commande d'installation :
npm install
Commande d'éxécution des tests unitaires :
npm test
Comme pour tous les modules, la présente partie métier n'est pas destinée à être exécutée directement, puisqu'elle consiste uniquement à mettre à disposition une fonction doTheJob
.
L'exécution se fera donc en appelant cette fonction depuis une instanciation dli-canvas
ou indirectement depuis les tests unitaires.