Pipeline d'index Catégorie Ingest
Les mappages de données complets à partir de la spécification, de la base de données et du schéma sont affichés pour la catégorie.
Spécifications de données de catégorie
Pour plus d'informations sur l'appel du service Ingest, voir Rechercher l'API de service Ingest. Pour une liste complète des zones et des paramètres d'index Elasticsearch, voir Types de zones d'index Elasticsearch.
Spécification des données :
| Nom de la zone de données | Type de données | Valeur de données |
|---|---|---|
| /uniqueId | long | L'identificateur interne du groupe de catalogues Commerce. |
| /identifier | chaîne | L'identificateur du groupe de catalogues externe. |
| /parentCategories/parentCategoryId | long | L'identificateur interne de la catégorie Commerce de la catégorie parent de ce groupe de catalogues. |
| /parentCategories/categoryIdentifier | chaîne | L'identificateur de catégorie externe de cette catégorie parent. |
| /parentCategories/catalogId | long | L'identificateur interne du catalogue Commerce. S'il n'est pas spécifié, le catalogue de magasin par défaut est utilisé. |
| /parentCategories/catalogIdentifier | chaîne | L'identificateur de catalogue externe pour cette catégorie parent. |
| /parentCategories/sequence | float | Le numéro de séquence utilisé pour déterminer l'ordre d'affichage dans cette catégorie parent. |
| /descriptions/languageId | entier | L'identificateur interne de la langue Commerce. S'il n'est pas spécifié, "paramètre régional" sera utilisé. Si "paramètre régional" n'est pas spécifié, la langue par défaut du magasin est utilisée. |
| /descriptions/locale | chaîne | L'identificateur des paramètres régionaux. |
| /descriptions/name | chaîne | Le nom dépendant de la langue de ce groupe de catalogues. |
| /descriptions/description | chaîne | Une courte description de ce groupe de catalogues. |
| /descriptions/longDescription | chaîne | La description longue de ce groupe de catalogues. |
| /descriptions/keywords | chaîne | Une liste de mots clés utilisés pour la recherche. |
| /descriptions/thumbnail | chaîne | Le chemin de l'image miniature de ce groupe de catalogues. |
| /descriptions/fullImage | chaîne | Le chemin de l'image en taille réelle de ce groupe de catalogues. |
| /descriptions/published | boolean | Indique si ce groupe de catalogues doit être affiché pour la langue actuelle. Paramètre par défaut : false. |
| /descriptions/sequence | float |
Mappage de la zone d'index Catégorie à partir de la spécification de données
- Chargement des documents de catégorie
- Génération d'une hiérarchie de catalogue et de chemins de navigation pour chaque catégorie de vente
Etape 1 : Chargement d'un document de catégorie
Cette phase décrit comment les données de catégorie peuvent être transformées à l'aide du script Groovy CreateCategoryDocument et chargées dans l'index Catégorie. Le tableau de mappage suivant définit comment les données de Spécifications de données de catégorie peuvent être mappées dans le schéma d'index de catégorie dans Elasticsearch.
| Nom de zone d'index | Type de zone d'index | Comment la valeur peut être affectée |
|---|---|---|
| id/store | id_integer | Défini par le processeurInjectMetaData |
| id/langue | id_integer | Assigné directement à partir de la zone de données "languageId" |
| id/catalog | id_long | Défini par le processeurInjectMetaData |
| id/catgroup | id_long | Assigné directement à partir de la zone de données "uniqueId" |
| id/member | id_long | |
| identifier/specification | id_string | Toujours défini sur "catégorie" |
| identifier/store | id_string | Défini par le processeurInjectMetaData |
| identifier/language | id_string | Extrait uniquement de la partie langue de la zone de données "paramètre régional" |
| identifier/catalog | id_string | Défini par le processeurInjectMetaData |
| identifier/category/raw | raw | Assigné directement à partir de la zone de données "identifier" |
| identifier/category/normalized | normalilsé | Identique à ci-dessus |
| name/raw | raw | Assigné directement à partir de la zone de données "name" |
| name/normalized | normalized | Identique à ci-dessus |
| name/text | texte | Identique à ci-dessus |
| description/raw | raw | Assigné directement à partir de la zone de données "description" |
| description/text | texte | Identique à ci-dessus |
| keyword/text | texte | Assigné directement à partir de la zone de données "keyword" |
| displayable | boolean | Assigné directement à partir de la zone de données "published" de la langue actuelle |
| url/thumbnail | raw | Assigné directement à partir de la zone de données "thumbnail" |
| url/image | raw | Assigné directement à partir de la zone de données "fullimage" |
| url/seo | raw | TBD |
Etape 2 : Génération d'une hiérarchie de catalogue pour la navigation
{
"stored_fields": [
"id.*",
"category.*"
],
"size": 10000,
"query": {
"bool": {
"must_not": {
"exists": {
"field": "category.parent"
}
},
"filter": [
{
"term": {
"id.store": "${param.storeId}"
}
},
{
"term": {
"id.catalog": "${param.catalogId}"
}
},
{
"term": {
"id.language": "${param.langId}"
}
}
]
}
}
}- Le jeu de résultats initial à partir de la requête de recherche ci-dessus renvoie toutes les catégories de niveau supérieur du catalogue de vente donné. Utilisation de toutes les catégories enfant de cet ensemble de catégories de niveau supérieur pour générer une autre requête Elasticsearch afin de rechercher les catégories enfant de niveau suivant du catalogue de vente actuel.
La requête ci-dessus sera ensuite renvoyée au flux de données dans NiFi pour réexécution.{ "stored_fields": [ "id.*", "category.*" ], "size": 10000, "query": { "bool": { "must": { "match_all": {} }, "filter": [ { "terms": { "category.parent": [ "10020", ... ] } }, { "term": { "id.store": "1" } }, { "term": { "id.catalog": "10502" } }, { "term": { "id.language": "-1" } } ] } } } - Pour tous les nœuds renvoyés au niveau actuel dans la hiérarchie du catalogue, parcourez chaque catégorie pour générer le chemin de navigation complet qui y mène dans ce catalogue de vente actuel.
Nom de zone d'index Type de zone d'index Description chemin texte Zone segmentée pour le chemin de navigation complet vers le nœud de catégorie actuel dans le catalogue de vente path/tree hiérarchie p. ex. /apparel/women/dresses, /apparel/women, /apparel path/reversed hierarchy_reversed par exemple /dresses, /women/dresses, /apparel/women/dresses
Mappage de la zone d'index Catégorie à partir de la base de données
- Création d'un document Catégorie
- Mise à jour avec les informations de facette
- Génération d'une hiérarchie de catalogue pour la navigation
Etape 1 - Création d'un document de catégorie
(SELECT C.CATGROUP_ID, C.MEMBER_ID, C.IDENTIFIER,
COALESCE(D.LANGUAGE_ID, L.LANGUAGE_ID) LANGUAGE_ID,
D.NAME, D.SHORTDESCRIPTION, D.THUMBNAIL, D.FULLIMAGE,
D.PUBLISHED, D.DISPLAY, D.KEYWORD,
R.CATGROUP_ID_PARENT, R.CATALOG_ID, R.SEQUENCE, L.LOCALENAME
FROM CATGRPREL R, LANGUAGE L, CATGROUP C ${TI_DELTA_CG_JOIN_QUERY}
LEFT OUTER JOIN CATGRPDESC D ON (D.CATGROUP_ID = C.CATGROUP_ID AND D.LANGUAGE_ID = ${param.langId})
WHERE R.CATALOG_ID = ${param.catalogId}
AND R.CATALOG_ID IN (SELECT CATALOG_ID FROM STORECAT WHERE STOREENT_ID IN
(SELECT RELATEDSTORE_ID FROM STOREREL WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId}))
AND R.CATGROUP_ID_CHILD = C.CATGROUP_ID AND C.MARKFORDELETE = 0 AND L.LANGUAGE_ID = ${param.langId} ${extCatgroupAndSQL}
UNION
SELECT C.CATGROUP_ID, C.MEMBER_ID, C.IDENTIFIER,
COALESCE(D.LANGUAGE_ID, L.LANGUAGE_ID) LANGUAGE_ID,
D.NAME, D.SHORTDESCRIPTION, D.THUMBNAIL, D.FULLIMAGE,
D.PUBLISHED, D.DISPLAY, D.KEYWORD,
NULL, R.CATALOG_ID, R.SEQUENCE, L.LOCALENAME
FROM CATTOGRP R, LANGUAGE L, CATGROUP C ${TI_DELTA_CG_JOIN_QUERY}
LEFT OUTER JOIN CATGRPDESC D ON (D.CATGROUP_ID = C.CATGROUP_ID AND D.LANGUAGE_ID = ${param.langId})
WHERE R.CATALOG_ID = ${param.catalogId}
AND R.CATALOG_ID IN (SELECT CATALOG_ID FROM STORECAT WHERE STOREENT_ID IN
(SELECT RELATEDSTORE_ID FROM STOREREL WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId}))
AND R.CATGROUP_ID = C.CATGROUP_ID AND C.MARKFORDELETE = 0 AND L.LANGUAGE_ID = ${param.langId} ${extCatgroupAndSQL}) ORDER BY CATGROUP_ID
| Nom de zone d'index | Type de zone d'index | Description |
|---|---|---|
| Identificateur du document. | ||
| id/store | id_string | ID interne du magasin propriétaire ; mappé à la table STORECGRP |
| id/langue | id_string | L'identificateur de la langue ; mappé à CATGRPDESC.LANGUAGE_ID |
| id/catalog | id_string | L'ID interne du catalogue de vente ; mappé à CATGRPREL.CATALOG_ID |
| id/catgroup | id_string | L'ID interne de la catégorie actuelle ; mappé à CATGRPREL.CATGROUP_ID_CHILD |
| id/member | id_string | Le numéro de référence interne qui identifie le propriétaire du groupe de catalogues ; mappé à CATGROUP.MEMBER_ID |
| identifier/specification | id_string | Défini sur "catégorie" |
| identificateur/magasin | id_string | Une chaîne qui identifie de façon unique le magasin propriétaire ; mappé à la table STOREENT |
| identifier/language | id_string | Le paramètre régional linguistique de ce groupe de catalogues ; mappé depuis CATGRPDESC.LANGUAGE_ID |
| identifier/catalog | id_string | L'identificateur externe du catalogue de vente ; mappé à CATGRPREL.CATALOG_ID |
| identifier/category/raw | raw | Même que ci-dessous |
| identifier/category/normalized | normalilsé | Attributs de base de Catgroup : mappé à CATGROUP.IDENTIFIER |
| Données sensibles à la langue | ||
| name/raw | raw | Le nom dépendant de la langue de ce groupe de catalogues ; mappé à CATGRPDESC.NAME |
| name/normalized | normalized | Identique à ci-dessus |
| keyword/text | texte | Un mot clé utilisé pour la recherche ; mappé à CATGRPDESC.KEYWORD |
| url/thumbnail | raw | Le chemin de l'image miniature de ce groupe de catalogues ; mappé à CATGRPDESC.THUMBNAIL |
| url/image | raw | Le chemin de l'image complet de ce groupe de catalogues ; mappé à CATGRPDESC.FULLIMAGE |
| Propriétés | ||
| displayable | boolean | Indique si ce groupe de catalogues doit être affiché pour la langue ; mappé à CATGRPDESC.PUBLISHED |
| Données de navigation | ||
| category/catalog | id_string | Le catalogue de vente de ce document actuel utilisé pour la séquence ; mappé à CATGRPREL.CATALOG_ID |
| category/parent | id_string | La catégorie de vente parent de ce document actuel utilisé pour la séquence ; mappé à CATGRPREL.CATGROUP_ID_PARENT |
| category/sequence | float | La séquence de niveau catégorie de feuilles (peu profonde) définie dans CMC ; mappé à CATGRPREL.SEQUENCE |
Etape 2 - Mise à jour avec informations de facette
SELECT I.CATALOG_ID, I.CATGROUP_ID, I.CATGROUP_ID_PARENT,
LISTAGG(A.NAME, '###') WITHIN GROUP (ORDER BY A.ATTR_ID) NAME,
LISTAGG(A.ATTR_ID, ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) ATTR_ID,
LISTAGG(A.IDENTIFIER, '###') WITHIN GROUP (ORDER BY A.ATTR_ID) IDENTIFIER,
LISTAGG(F.MAX_DISPLAY, ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) MAX_DISPLAY,
LISTAGG(F.SELECTION, ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) SELECTION,
LISTAGG(TO_CHAR(COALESCE(FCG.SEQUENCE, F.SEQUENCE)), ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) SEQUENCE,
LISTAGG(F.FACET_ID, ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) FACET_ID,
LISTAGG(F.SORT_ORDER, ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) SORT_ORDER,
LISTAGG(F.ZERO_DISPLAY, ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) ZERO_DISPLAY,
LISTAGG(COALESCE(F.GROUP_ID, 0), ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) GROUP_ID,
LISTAGG(F.KEYWORD_SEARCH, ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) KEYWORD_SEARCH,
LISTAGG(A.FACETABLE, ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) FACETABLE,
LISTAGG(A.SWATCHABLE, ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) SWATCHABLE,
LISTAGG(COALESCE(A.STOREDISPLAY, 0), ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) STOREDISPLAY,
LISTAGG(COALESCE(FCG.STOREENT_ID, A.STOREENT_ID), ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) STOREENT_ID,
LISTAGG(COALESCE(FCG.DISPLAYABLE, 1), ', ') WITHIN GROUP (ORDER BY A.ATTR_ID) DISPLAYABLE
FROM (SELECT A.ATTR_ID, A.IDENTIFIER, A.FACETABLE, A.SWATCHABLE, A.STOREDISPLAY, A.STOREENT_ID, COALESCE(D.NAME, DF.NAME) NAME
FROM ATTR A
LEFT JOIN ATTRDESC D ON D.ATTR_ID = A.ATTR_ID AND D.LANGUAGE_ID = ${param.langId}
LEFT OUTER JOIN ATTRDESC DF ON DF.ATTR_ID = A.ATTR_ID AND DF.LANGUAGE_ID = ${default.language}) A,
FACET F
LEFT JOIN FACETCATGRP FCG ON F.FACET_ID = FCG.FACET_ID AND FCG.STOREENT_ID = ${param.storeId},
(SELECT DISTINCT P.CATALOG_ID, P.CATGROUP_ID, C.ATTR_ID, H.CATGROUP_ID_PARENT
FROM CATGPENREL P, CATENTRYATTR C,
(SELECT G.CATGROUP_ID, R.CATALOG_ID, R.CATGROUP_ID_PARENT
FROM CATGRPREL R, CATGROUP G
WHERE R.CATALOG_ID = ${param.catalogId}
AND R.CATALOG_ID IN (SELECT CATALOG_ID FROM STORECAT WHERE STOREENT_ID IN
(SELECT RELATEDSTORE_ID FROM STOREREL WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId}))
AND R.CATGROUP_ID_CHILD = G.CATGROUP_ID AND G.MARKFORDELETE = 0
UNION
SELECT G.CATGROUP_ID, R.CATALOG_ID, NULL
FROM CATTOGRP R, CATGROUP G
WHERE R.CATALOG_ID = ${param.catalogId}
AND R.CATALOG_ID IN (SELECT CATALOG_ID FROM STORECAT WHERE STOREENT_ID IN
(SELECT RELATEDSTORE_ID FROM STOREREL WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId}))
AND R.CATGROUP_ID = G.CATGROUP_ID AND G.MARKFORDELETE = 0) H
WHERE P.CATALOG_ID = H.CATALOG_ID AND P.CATGROUP_ID = H.CATGROUP_ID
AND P.CATENTRY_ID = C.CATENTRY_ID ${extCatgroupAndSQL1a}) I
${TI_DELTA_CG_FACET_JOIN_QUERY}
WHERE I.ATTR_ID = A.ATTR_ID AND A.ATTR_ID = F.ATTR_ID
AND F.STOREENT_ID IN
(SELECT RELATEDSTORE_ID FROM STOREREL WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId})
GROUP BY I.CATALOG_ID, I.CATGROUP_ID, I.CATGROUP_ID_PARENT
Ensuite, le jeu de résultats est transmis au processeur FindFacetsForCategoryFromDatabase pour transformation, à l'aide du tableau suivant pour mapper la zone de base de données renvoyée depuis l'instruction SQL ci-dessus vers une zone d'index dans l'index Catégorie :
| Nom de zone d'index | Type de zone d'index | Description |
|---|---|---|
| Données de navigation | ||
| facets/<id>/id | id_string | L'identificateur de facette interne de la facette correspondante ; mappé à FACET.FACET_ID |
| facets/<id>/key | id_string | L'identificateur de facettes normalisé qui est utilisé comme clé pour cette entrée de facette actuelle ; généré à partir de ATTR.IDENTIFIER |
| facets/<id>/search | boolean | Décrit si la facette doit être incluse dans la recherche de mots clés ; mappé à FACET.KEYWORD_SEARCH |
| facets/<id>/displayable | boolean | Décrit si la facette doit être affichée dans la vitrine ; mappé à FACETCATGRP.DISPLAYABLE |
| facets/<id>/sequence | float | La séquence de la facette affichée dans la vitrine ; mappé à FACET.SEQUENCE |
| facets/<id>/group | id_string | L'identificateur de groupe interne de la facette à utiliser dans la vitrine ; mappé à FACET.GROUP_ID |
| facets/<id>/attribute/id | id_string | L'ID d'attribut interne correspondant de la facette actuelle ; mappé à FACET.ATTR_ID |
| facets/<id>/attribute/name | id_string | Le nom d'attribut spécifique au langage correspondant de la facette actuelle |
| facets/<id>/attribute/identifier | id_string | L'identificateur d'attribut correspondant de la facette actuelle ; mappé à ATTR.IDENTIFIER |
| facets/<id>/attribute/displayable | boolean | Identifie si cette facette doit être affichée dans la vitrine ; mappé à ATTR.DISPLAYABLE |
| facets/<id>/attribute/swatchable | boolean | Identifie si cette facette peut être utilisée avec des images pour la création de facettes ; mappé à ATTR.SWATCHABLE |
| facets/<id>attribute/ribbon | boolean | Identifie si cet attribut peut être utilisé comme ruban pour l'affichage ; mappée à ATTR.STOREDISPLAY |
| facets/<id>/attribute/usage | raw | Décrit l'utilisation de cet attribut ; mappé à ATTR.ATTRUSAGE |
| facets/<id>/display/limit | entier | Les valeurs maximales à afficher dans la vitrine pour la facette ; mappé à FACET.MAX_DISPLAY |
| facets/<id>/display/zero | boolean | Décrit si l'attribut apte aux facettes doit afficher des valeurs de comptage nulles ; mappé à FACET.ZERO_DISPLAY |
| facets/<id>/display/multiple | boolean | Décrit si l'attribut apte aux facettes permet plusieurs sélections ; mappé à FACET.SELECTION |
| facets/<id>/display/order | entier | L'ordre d'affichage à utiliser lors de l'affichage des valeurs de la facette ; mappé à FACET.SORT_ORDER |
Pour un exemple de code, voir les exemples Etape 2.
Etape 3 - Génération d'une hiérarchie de catalogue pour la navigation
Cette étape décrit comment les données de navigation peuvent être générées et chargées dans l'index Catégorie. Il commence par exécuter la requête Elasticsearch suivante au niveau de l'index Catégorie actuel :
{
"stored_fields": [
"id*",
"category.*",
"name.*"
],
"size": ${es.pageSize},
"query": {
"bool": {
"must_not": {
"exists": {
"field": "category.parent"
}
},
"filter": [
{
"term": {
"id.store": "${param.storeId}"
}
},
{
"term": {
"id.catalog": "${param.catalogId}"
}
},
{
"term": {
"id.language": "${param.langId}"
}
}
]
}
}
}
{
"stored_fields": [
"id*",
"category.*",
"name.*"
],
"size": 10000,
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [
{
"terms": {
"category.parent": [
"10020", ...
]
}
},
{
"term": {
"id.store": "1"
}
},
{
"term": {
"id.catalog": "10502"
}
},
{
"term": {
"id.language": "-1"
}
}
]
}
}
}
La requête ci-dessus sera ensuite renvoyée au flux de données dans NiFi pour réexécution.
| Nom de zone d'index | Type de zone d'index | Description |
|---|---|---|
| Données de navigation | ||
| category/child | id_string | La catégorie de vente enfant de ce document actuel utilisé pour la séquence ; mappé à CATGRPREL.CATGROUP_ID_CHILD |
| category/sequence | float | La séquence de niveau catégorie de feuilles (peu profonde) définie dans CMC ; mappé à CATGRPREL.SEQUENCE |
| chemin | raw | Zone segmentée pour le chemin de navigation complet vers le nœud de catégorie actuel dans le catalogue de ventes. Par exemple, lorsqu'une catégorie "robe" (id:10001) avec le chemin d'accès "/1/3/10001" est indexée pour le catalogue de vente 10502, ce champ stocke la forme originale du chemin d'accès |
| path/tree | hiérarchie | Il s'agit de la version segmentée de la zone de chemin d'accès ci-dessus, par exemple 1, 3, 10001 |
| path/list | raw | Il s'agit de la version canonique pour la liste des noms de zones de chemin d'accès, par exemple Aurora, Women, Dress |
Exemples de mappage de base de données :
Stage 1
{
"CATGROUP_ID": 5,
"MEMBER_ID": 7000000000000001000,
"IDENTIFIER": "Girls",
"LANGUAGE_ID": -1,
"NAME": "Girls",
"SHORTDESCRIPTION": "Girls",
"LONGDESCRIPTION": null,
"THUMBNAIL": "images/catalog/apparel/girls/category/catr_app_girls.png",
"FULLIMAGE": "images/catalog/apparel/girls/category/catr_app_girls.png",
"PUBLISHED": 1,
"DISPLAY": null,
"KEYWORD": "casual, sporty, skirt, sweater, kid",
"CATGROUP_ID_PARENT": 1,
"CATALOG_ID": 10001,
"SEQUENCE": 1,
"LOCALENAME": "en_US "
}
{ "update": { "_id": "1--1-10001-5", "_index": ".auth.1.category.202006160325", "retry_on_conflict": 5, "_source": false } }
{
"doc": {
"identifier": {
"specification": "category",
"language": "en_US",
"category": {
"normalized": "Girls",
"raw": "Girls"
}
},
"name": {
"normalized": "Girls",
"raw": "Girls"
},
"displayable": true,
"description": {
"raw": "Girls"
},
"id": {
"catalog": "10001",
"member": "7000000000000001000",
"catgroup": "5",
"language": "-1",
"store": "1"
},
"keyword": {
"text": "casual, sporty, skirt, sweater, kid"
},
"category": {
"parent": "1",
"sequence": 1,
"catalog": "10001"
},
"url": {
"image": "images/catalog/apparel/girls/category/catr_app_girls.png",
"thumbnail": "images/catalog/apparel/girls/category/catr_app_girls.png"
},
"__meta": {
"created": "2020-07-30T13:10:34.018Z",
"modified": "2020-07-30T13:10:34.046Z",
"version": {
"min": 0,
"max": 0
}
}
},
"doc_as_upsert": true
}
Etape 2
{
"CATALOG_ID": 10001,
"CATGROUP_ID": 10001,
"NAME": "Available Sizes",
"ATTR_ID": "7000000000000000001",
"IDENTIFIER": "swatchSize",
"MAX_DISPLAY": "-1",
"SELECTION": "0",
"SEQUENCE": "0",
"FACET_ID": "3074457345618269104",
"SORT_ORDER": "0",
"ZERO_DISPLAY": "0",
"GROUP_ID": "0",
"KEYWORD_SEARCH": "1",
"FACETABLE": "1",
"SWATCHABLE": "0",
"STOREENT_ID": "10501",
"DISPLAYABLE": "1"
}store id, languages id et catalog id transmis à partir de la classe NiFi FlowFile en tant qu'attributs dans les données de sortie suivantes :
{ "update": { "_id": "1--1-10001-10001", "_index": ".auth.1.category.202006160325", "retry_on_conflict": 5, "_source": false } }
{
"doc": {
"__meta": {
"modified": "2020-07-30T13:42:12.819Z"
},
"facets": {
"swatchsize": {
"sequence": 0,
"search": true,
"display": {
"zero": false,
"limit": -1,
"multiple": false,
"order": 0
},
"displayable": true,
"id": "3074457345618269104",
"attribute": {
"identifier": "swatchSize",
"name": "Available Sizes",
"id": "7000000000000000001",
"swatchable": false
},
"key": "swatchsize",
"group": "0"
}
}
}
}Etape 3
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 0,
"hits": [
{
"_index": ".auth.1.category.202006182302",
"_type": "_doc",
"_id": "1--1-10502-10",
"_score": 0,
"fields": {
"name.normalized": [
"newsletters & magazines"
],
"id.member": [
"7000000000000001001"
],
"identifier.category.normalized": [
"newslettersandmagazines"
],
"name.raw": [
"Newsletters & Magazines"
],
"identifier.category.raw": [
"NewslettersAndMagazines"
],
"category.catalog": [
"10502"
],
"identifier.language": [
"en_US"
],
"id.catgroup": [
"10"
],
"id.catalog": [
"10502"
],
"identifier.specification": [
"category"
],
"id.language": [
"-1"
],
"id.store": [
"1"
],
"category.sequence": [
6
]
}
},
{
"_index": ".auth.1.category.202006182302",
"_type": "_doc",
"_id": "1--1-10502-7",
"_score": 0,
"fields": {
"name.normalized": [
"grocery"
],
"id.member": [
"7000000000000001001"
],
"identifier.category.normalized": [
"grocery"
],
"name.raw": [
"Grocery"
],
"identifier.category.raw": [
"Grocery"
],
"category.catalog": [
"10502"
],
"identifier.language": [
"en_US"
],
"id.catgroup": [
"7"
],
"id.catalog": [
"10502"
],
"identifier.specification": [
"category"
],
"id.language": [
"-1"
],
"id.store": [
"1"
],
"category.sequence": [
3
]
}
},
{
"_index": ".auth.1.category.202006182302",
"_type": "_doc",
"_id": "1--1-10502-8",
"_score": 0,
"fields": {
"name.normalized": [
"health"
],
"id.member": [
"7000000000000001001"
],
"identifier.category.normalized": [
"health"
],
"name.raw": [
"Health"
],
"identifier.category.raw": [
"Health"
],
"category.catalog": [
"10502"
],
"identifier.language": [
"en_US"
],
"id.catgroup": [
"8"
],
"id.catalog": [
"10502"
],
"identifier.specification": [
"category"
],
"id.language": [
"-1"
],
"id.store": [
"1"
],
"category.sequence": [
4
]
}
},
{
"_index": ".auth.1.category.202006182302",
"_type": "_doc",
"_id": "1--1-10502-6",
"_score": 0,
"fields": {
"name.normalized": [
"electronics"
],
"id.member": [
"7000000000000001001"
],
"identifier.category.normalized": [
"electronics"
],
"name.raw": [
"Electronics"
],
"identifier.category.raw": [
"Electronics"
],
"category.catalog": [
"10502"
],
"identifier.language": [
"en_US"
],
"id.catgroup": [
"6"
],
"id.catalog": [
"10502"
],
"identifier.specification": [
"category"
],
"id.language": [
"-1"
],
"id.store": [
"1"
],
"category.sequence": [
2
]
}
},
{
"_index": ".auth.1.category.202006182302",
"_type": "_doc",
"_id": "1--1-10502-9",
"_score": 0,
"fields": {
"name.normalized": [
"home & furnishing"
],
"id.member": [
"7000000000000001001"
],
"identifier.category.normalized": [
"home furnishings"
],
"name.raw": [
"Home & Furnishing"
],
"identifier.category.raw": [
"Home Furnishings"
],
"category.catalog": [
"10502"
],
"identifier.language": [
"en_US"
],
"id.catgroup": [
"9"
],
"id.catalog": [
"10502"
],
"identifier.specification": [
"category"
],
"id.language": [
"-1"
],
"id.store": [
"1"
],
"category.sequence": [
5
]
}
},
{
"_index": ".auth.1.category.202006182302",
"_type": "_doc",
"_id": "1--1-10502-1",
"_score": 0,
"fields": {
"name.normalized": [
"apparel"
],
"id.member": [
"7000000000000001001"
],
"identifier.category.normalized": [
"apparel"
],
"name.raw": [
"Apparel"
],
"identifier.category.raw": [
"Apparel"
],
"category.catalog": [
"10502"
],
"identifier.language": [
"en_US"
],
"id.catgroup": [
"1"
],
"id.catalog": [
"10502"
],
"identifier.specification": [
"category"
],
"id.language": [
"-1"
],
"id.store": [
"1"
],
"category.sequence": [
1
]
}
}
]
}
}Le processeur BuildCatalogHierarchyForCategory transforme ces données d'entrée en un ensemble de données de sortie, l'une pour la relation suivante et l'autre pour la relation de mise à jour, comme indiqué dans le diagramme de flux NiFi.
{
"stored_fields": [
"id*",
"category.*",
"name.*"
],
"size": 10000,
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [
{
"terms": {
"category.parent": [
"11",
"1",
"6",
"7",
"8",
"9",
"10"
]
}
},
{
"term": {
"id.store": "1"
}
},
{
"term": {
"id.catalog": "10001"
}
},
{
"term": {
"id.language": "-1"
}
}
]
}
}
}
{ "update": { "_id": "1--1-10001-7", "_index": ".auth.1.category.202006160325", "retry_on_conflict": 5, "_source": false } }
{ "doc": {"path":"/7","category":{"path":{"name":["Grocery"],"id":["7"]}},"__meta":{"modified":"2020-07-31T12:57:33.942Z"}} }
{ "update": { "_id": "1--1-10001-9", "_index": ".auth.1.category.202006160325", "retry_on_conflict": 5, "_source": false } }
{ "doc": {"path":"/9","category":{"path":{"name":["Home & Furnishing"],"id":["9"]}},"__meta":{"modified":"2020-07-31T12:57:34.409Z"}} }
{ "update": { "_id": "1--1-10001-6", "_index": ".auth.1.category.202006160325", "retry_on_conflict": 5, "_source": false } }
{ "doc": {"path":"/6","category":{"path":{"name":["Electronics"],"id":["6"]}},"__meta":{"modified":"2020-07-31T12:57:34.410Z"}} }
{ "update": { "_id": "1--1-10001-1", "_index": ".auth.1.category.202006160325", "retry_on_conflict": 5, "_source": false } }
{ "doc": {"path":"/1","category":{"path":{"name":["Apparel"],"id":["1"]}},"__meta":{"modified":"2020-07-31T12:57:34.410Z"}} }
{ "update": { "_id": "1--1-10001-11", "_index": ".auth.1.category.202006160325", "retry_on_conflict": 5, "_source": false } }
{ "doc": {"path":"/11","category":{"path":{"name":["Hardware"],"id":["11"]}},"__meta":{"modified":"2020-07-31T12:57:34.411Z"}} }
{ "update": { "_id": "1--1-10001-8", "_index": ".auth.1.category.202006160325", "retry_on_conflict": 5, "_source": false } }
{ "doc": {"path":"/8","category":{"path":{"name":["Health"],"id":["8"]}},"__meta":{"modified":"2020-07-31T12:57:34.411Z"}} }
{ "update": { "_id": "1--1-10001-10", "_index": ".auth.1.category.202006160325", "retry_on_conflict": 5, "_source": false } }
{ "doc": {"path":"/10","category":{"path":{"name":["Newsletters & Magazines"],"id":["10"]}},"__meta":{"modified":"2020-07-31T12:57:34.412Z"}} }