Pipeline d'index Synonyme Ingest

Mappage de la zone d'index Synonyme à partir de la spécification de données

Le diagramme suivant illustre le pipeline d'indexation Synonyme implémenté dans Apache NiFi. Le flux se compose principalement de trois étapes :
  1. Générer un document de dictionnaire Synonyme pour ElasticSearch basé sur le synonyme d'entrée par langue.
  2. (SI POST) Extraire les synonymes actuels dans le dictionnaire d'index de produit et les ajouter au document généré à l'étape 1.
  3. Mettre à jour les dictionnaires spécifiques à la langue du produit avec le document Synonyme généré lors des étapes 1 et 2.
Initial
APPEL PUT ou POST REST : http://<Hostname>:30700/connectors/JsonSynonym/data
{​​​
    ​"synonyms": {
        ​ "english": {
            "synonyms": [
                "coff => coffee",
                "driveway, road, street"​
            ]
        ​},
        "french": {
            "synonyms": [
                ​"coff => coffee",
                "driveway, road, street"​
            ]
        ​​}
    }
​}​​​
1. Générer le document du dictionnaire Synonyme
Le flux de données suivant décrit comment les données Synonyme spécifiques à la langue peuvent être transformées à l'aide du script Groovy CreateSynonymBodyPart1.
Sortie :
{
    ​"analysis" : {
        "filter" : {
            "custom_english_synonyms_dictionary" : {
                ​"synonyms" : [ "coff => coffee", "driveway, road, street" ],
                "type" : "synonym"
            },
            "custom_french_synonyms_dictionary" : {
                ​"synonyms" : [ "coff => coffee", "driveway, road, street" ],
                "type" : "synonym"
            ​}
        ​}
    }
}​
2. (SI POST) Extraire les synonymes actuels dans le dictionnaire d'index de produit et les ajouter au document généré
Le flux de données suivant décrit ce qui se passe lorsque l'utilisateur effectue une requête POST* :
  1. Un appel GET est effectué pour obtenir les dictionnaires Synonyme actuels par langue à partir de l'index du produit.
  2. Les données Synonyme spécifiques à la langue de l'étape 1 seront transformées à l'aide du script Groovy CreateSynonymBodyPart2, afin de fusionner les données avec le document généré lors de l'étape 1.
*Sinon, l'utilisateur fera une requête PUT, qui n'ajoutera pas les dictionnaires de synonymes spécifiés dans la langue actuelle dans l'index au document de l'étape 1.
Résultat de l'étape 2 :
​{
    ​"analysis" : {
        "filter" : {
            "custom_english_synonyms_dictionary" : {
                ​"synonyms" : [ "coff => coffee", "driveway, road, street" ],
                "type" : "synonym"
            },
            "custom_french_synonyms_dictionary" : {
                ​"synonyms" : [ "coff => coffee", "ibm => hcl", "driveway, road, street", "musab => musab mobashir" ],
                "type" : "synonym"
            ​},
            "custom_german_synonyms_dictionary" : {
                ​"synonyms" : [ "ibm => hcl", "driveway, road, street", "musab => musab mobashir" ],
                "type" : "synonym"
            ​}
        ​}
    }
}​
3. Mettre à jour les dictionnaires spécifiques à la langue du produit avec le document Synonyme
Le flux de données ci-dessus décrit le processus de mise à jour (écrasement) du dictionnaire spécifique à la langue avec la documentation précédemment générée.
Le processus se compose des étapes suivantes :
  1. Fermer l'index Produit
  2. Mettre à jour l'index Produit
  3. Ouvrir l'index Produit

Mappage de la zone d'index Synonyme à partir de la base de données

Spécification des données :

Le diagramme suivant illustre le pipeline d'indexation Association des termes de recherche (STA) implémenté dans Apache NiFi. Le flux se compose principalement de deux étapes :
  1. Extraire les STA de base de données relatives à la valeur StoreID (et à la valeur storeID associée) et générer un document STA pour ElasticSearch.
  2. Mettre à jour les dictionnaires spécifiques à la langue du produit avec le document STA généré lors de l'étape 1.
Etape 1 : Extraire les STA de base de données relatives à la valeur StoreID (et à la valeur storeID associée) et générer un document STA pour la ElasticSearch
Le flux de données suivant décrit comment les données de la base de données STA peuvent être transformées à l'aide du script Groovy CreateSTABody.
SQL :
	SELECT S.SRCHTERMASSOC_ID,
		       LISTAGG(S.ASSOCIATIONTYPE, '###') WITHIN GROUP (ORDER BY T.TYPE) ASSOCIATIONTYPE,
		       LISTAGG(S.STATUS, '###') STATUS,
		       LISTAGG(L.LOCALENAME, '###') LOCALENAME,
		       LISTAGG(T.TYPE, '###') TYPE,
		       LISTAGG(T.TERM, '###') TERM
		  FROM LANGUAGE L, SRCHTERMASSOC S, SRCHTERM T, STORECAT C
		 WHERE NOT S.ASSOCIATIONTYPE = 4 AND S.STATUS = 1 AND S.SRCHTERMASSOC_ID=T.SRCHTERMASSOC_ID
		   AND L.LANGUAGE_ID=S.LANGUAGE_ID AND L.LANGUAGE_ID = ${param.langId}
		   AND S.STOREENT_ID IN
		       (SELECT RELATEDSTORE_ID FROM STOREREL WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId})
		   AND C.MASTERCATALOG = 1 AND C.CATALOG_ID = ${param.catalogId}
		   AND C.STOREENT_ID IN
		       (SELECT RELATEDSTORE_ID FROM STOREREL WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId})
	         GROUP BY S.SRCHTERMASSOC_ID
Entrée :
[
  {
    "SRCHTERMASSOC_ID": 3074457345616678000,
    "ASSOCIATIONTYPE": "1###1",
    "STATUS": "1###1",
    "LOCALENAME": "en_US           ###en_US           ",
    "TYPE": "1###1",
    "TERM": "laptop###thinkpad"
  }
]
Sortie :
{
  "analysis": {
    "filter": {
      "custom_en_US_sta": {
        "synonyms": [
          "laptop, thinkpad"
        ],
        "type": "synonym"
      }
    }
  }
}
Etape 2. Mettre à jour les dictionnaires spécifiques à la langue du produit avec le document STA généré lors de l'étape 1.
Le flux de données suivant décrit le processus
  1. Fermer l'index Produit
  2. Mettre à jour l'index Produit
  3. Ouvrir l'index Produit
de mise à jour (écrasement) du dictionnaire spécifique à la langue avec la documentation précédemment générée lors des étapes suivantes :