Canalización de índice de categoría de Ingest

Se muestran las correlaciones de datos completas de especificación, base de datos y esquema para la categoría.

Especificaciones de datos de categoría

Para obtener información sobre cómo llamar al servicio de ingesta, consulte la API del servicio de in de introducción de búsqueda. Para obtener una lista completa de los campos y parámetros del índice Elasticsearch, consulte Tipos de campos de índice de Elasticsearch .

Especificación de datos:

Nombre de campo de datos Tipo de datos Valor de datos
/uniqueId long El identificador interno de grupo de catálogo de Commerce.
/identifier string El identificador externo del grupo de catálogo.
​/parentCategories/parentCategoryId long El identificador interno de categoría de Commerce de la categoría padre de este grupo de catálogo.
​/parentCategories/categoryIdentifier string El identificador de categoría externo de la categoría padre.
​/parentCategories/catalogId long El identificador interno de catálogo de Commerce. Si no se especifica, se utiliza el catálogo predeterminado de la tienda.
/parentCategories/​catalogIdentifier string El identificador de catálogo externo de la categoría padre.
​/parentCategories/sequence float El número de secuencia que se utiliza para determinar el orden de visualización en esta categoría padre.
​/descriptions/languageId entero El identificador interno de idioma de Commerce. Si no se especifica, se utilizará "locale". Si no se ha especificado un "locale", se utilizará el idioma por omisión de la tienda.
​/descriptions/locale string El identificador de entorno local.
​/descriptions/name string El nombre que depende del idioma de este grupo de catálogo.
​/descriptions/description string Una descripción breve de este grupo de catálogo.
​/descriptions/longDescription string La descripción completa de este grupo de catálogo.
​/descriptions/keywords string Una lista de palabras clave utilizada para efectuar búsquedas.
​/descriptions/thumbnail string La vía de acceso de imagen en miniatura de este grupo de catálogo.
​/descriptions/fullImage string La vía de acceso de la imagen de tamaño normal de este grupo de catálogo.
​/descriptions/published boolean Indica si este grupo de catálogo debe visualizarse para el idioma actual. El valor predeterminado es false.
​/descriptions/sequence float

Correlación de campos de índice de categoría de la especificación de datos

El diagrama siguiente ilustra la canalización de indexación de categorías implementada en Apache NiFi. El flujo consta de dos etapas:
  1. Cargar documentos de categoría
  2. Crear jerarquía de catálogo y rutas de navegación para cada categoría de ventas

Paso 1 Cargar un documento de Categoría

Esta etapa describe cómo se puede transformar los datos de categoría utilizando el script Groovy CreateCategoryDocument y se carga en el índice de Ccategoría. ​​​​​​​​​​​​​​La siguiente tabla de correlación​ define cómo se pueden correlacionar los datos de la especificación de datos de Categoría en el esquema de índice de Categoría en Elasticsearch.

​​Campo de índice​ Nombre​ Tipo de campo de índice Cómo se puede asignar el valor
​id/tienda id_integer Establecido por el procesador InjectMetaData
ID/​idioma id_integer Asignado directamente desde el campo de datos "languageId"
id/​catalog ​​id_long Establecido por el procesador InjectMetaData
id/​catgroup ​​id_long Asignado directamente desde el campo de datos "uniqueId"
​id/member id_long
​identifier/specification id_string Establezca siempre en "categoría"
​identifier/​store id_string Establecido por el procesador InjectMetaData
​identifier/language id_string Extraído solo de la parte de idioma del campo de datos "entorno local"
​identifier/catalog id_string Establecido por el procesador InjectMetaData
​identifier/category/raw raw Asignado directamente desde el campo de datos "identificador"
​identifier/category/normalized normalizado Igual que anterior
​​name/raw raw Asignado directamente desde el campo de datos "nombre"
​​name/normalized normalized Igual que anterior
​name/text text Igual que anterior
​​description/raw raw Asignado directamente desde el campo de datos "Descripción"
​description/text text Igual que anterior
​keyword/text text Asignado directamente desde el campo de datos "palabra clave"
displayable boolean Asignado directamente desde el campo de datos "publicado" del idioma actual
url/​thumbnail raw Asignado directamente desde el campo de datos "miniatura"
​url/​image raw Asignado directamente desde el campo de datos "fullimage"
url/​​seo raw Por determinar
Las definiciones para los alias de tipo de campo (en cursiva) se describen en el Alias y uso de tipos de campo de índice.

Etapa 2: Crear una jerarquía de catálogo para la navegación

Esta etapa describe cómo generar los datos de navegación y cargarlos en el índice de categoría. Empieza con la ejecución de la siguiente consulta de Elasticsearch con el índice de Categoría actual.
{
  "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}"
          }
        }
      ]
    }
  }
}
A continuación, el conjunto de resultados se pasa al script Groovy BuildCatalogHierarchyForCategory para su transformación y utiliza la lógica siguiente para generar el árbol de navegación.
  • El conjunto de resultados inicial de la consulta de búsqueda anterior devolverá todas las categorías de nivel superior del catálogo de ventas especificado. Utilizando todas las categorías hijo de este conjunto de categorías de nivel superior para generar otra consulta Elasticsearch para buscar las categorías hijo del siguiente nivel del catálogo de ventas actual.
    	  {
    		"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"
    				}
    			  }
    			]
    		    }
    	​        }
    	}​
    La consulta anterior se enviará de nuevo al flujo de datos en NiFi para volver a ejecutarla.
  • Para todos los nodos devueltos en el nivel actual de la jerarquía de catálogo, pase por cada categoría para generar la ruta de navegación completa en este catálogo de ventas actual.
    ​Nombre de ​campo de índice​ Tipo de campo de índice Descripción:
    path text Campo de señalización para la ruta de navegación completa a la categoría actual nodo en el catálogo de ventas
    path/tree jerarquía p.ej., /apparel/women/dresses, /apparel/women, /apparel
    ​path/reversed hierarchy_reversed p.ej., /dresses, /women/dresses, /apparel/women/dresses

    ​​

Correlación de campos de índice de categoría de la base de datos

La creación de un índice de categoría desde la base de datos de comercio se produce en tres etapas:
  1. Creación de un documento de categoría
  2. Actualización con información de faceta
  3. Creación de jerarquía de catálogo para navegación

Etapa 1 - Creación de un documento de categoría

Esta etapa describe cómo transformar los datos del catálogo y cargarlos en el índice del catálogo. Empieza con la ejecución del siguiente SQL para recuperar datos de Categoría de la base de datos de Commerce:
(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	
A continuación, el conjunto de resultados se pasa al procesador CreateCategoryDocumentFromDatabase​ para su transformación, utilizando la tabla siguiente para ​correlacionar el campo de base de datos devuelto desde el SQL anterior con un campo de índice en el índice de Categoría:​​
​​Campo de índice​ Nombre​ Tipo de campo de índice Descripción:
​​Identificador del documento​​
​id/tienda id_string ID interno de la tienda propietaria; se correlaciona con la tabla STORECGRP
ID/​idioma id_string El identificador del idioma; se correlaciona con CATGRPDESC​​.LANGUAGE_ID
id/​catalog id_string El ID interno del catálogo de ventas; se correlaciona con CATGRPREL.CATALOG_ID
id/​catgroup id_string El ID interno de la categoría actual; se correlaciona con CATGRPREL.CATGROUP_ID_CHILD
​id/member ​id_string El número de referencia interno que identifica al propietario del grupo de catálogo; se correlaciona con CATGROUP​.MEMBER_ID
​identifier/specification id_string Establecer en "categoría"
​identifier/​store id_string Una cadena que identifica de forma exclusiva la tienda propietaria; se correlaciona con la tabla STOREENT​
​identifier/language id_string El entorno local de idioma de este grupo de catálogo; se correlaciona desde CATGRP​DESC​.LANGUAGE_ID
​identifier/catalog id_string El identificador externo del catálogo; se correlaciona con CATGRPREL​.CATALOG_ID
​identifier/category/raw raw Igual que a continuación
​identifier/category/normalized normalizado Atributos básicos de Catgroup: se correlaciona con CATGROUP.IDENTIFIER
​​Datos sensibles al idioma​​​
​​name/raw raw El nombre que depende del idioma de este grupo de catálogo; se correlaciona con CATGRPDESC​​.NAME
​​name/normalized normalized Igual que anterior
​keyword/text text Palabra clave utilizada para la búsqueda; se correlaciona con CATGRPDESC.KEYWORD
url/​thumbnail raw La ruta de imagen en miniatura de este grupo de catálogo; se correlaciona con CATGRPDESC​​.THUMBNAIL
​url/​image raw La ruta de imagen completa de este grupo de catálogo; se correlaciona con CATGRPDESC​​​.FULLIMAGE​
Propiedades
displayable boolean Indica si este grupo de catálogo debe visualizarse para el idioma; se correlaciona con CATGRPDESC.PUBLISHED
​Datos de navegación​​​​
category/catalog id_string El catálogo de ventas de este documento actual utilizado para la secuencia; se correlaciona con CATGRPREL.CATALOG_ID
​category/parent ​id_string La categoría de ventas padre de este documento actual utilizada para la secuencia; se correlaciona con CATGRPREL.CATGROUP_ID_PARENT
​category/sequence float La secuencia de nivel de categoría de hoja (superficial) definida en CMC; se correlaciona con CATGRPREL.SEQUENCE
Por ejemplo, consulte los Stage 1 ejemplos.

Etapa 2 - Actualización con información de faceta

Esta etapa describe cómo transformar los datos relacionados de la faceta y cargarlos en el índice del catálogo. Empieza con la ejecución del siguiente SQL para recuperar datos de Categoría de la base de datos de Commerce:
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

A continuación, el conjunto de resultados se pasa al procesador FindFacetsForCategoryFromDatabase para su transformación, utilizando la tabla siguiente para ​correlacionar el campo de base de datos devuelto desde el SQL anterior con un campo de índice en el índice de Categoría:​

​​Campo de índice​ Nombre​ Tipo de campo de índice Descripción:
​Datos de navegación​​​​
​​facetas/<id>/id ​​id_string El identificador de faceta interno de la faceta correspondiente; se correlaciona con faceta. FACET.FACET_ID
​facetas/<id>/clave id_​string El identificador de faceta normalizado que se utiliza como la clave para esta entrada de faceta actual; generado a partir de ATTR.IDENTIFIER
​facetas/<id>/búsqueda boolean ​Describe si debe incluirse la faceta en la búsqueda por palabra clave; se correlaciona con FACET.KEYWORD_SEARCH
​facetas/<id>/visualizable boolean Describe si la faceta debe visualizarse en el escaparate; se correlaciona con FACETCATGRP.DISPLAYABLE
​​facetas/<id>/secuencia float ​La secuencia de la faceta que se muestra en el escaparate; se correlaciona con FACET.SEQUENCE
​facets/<identifier>/group id_​string ​El identificador de grupo interno de la faceta que se utilizará en el escaparate; correlacionado con FACET.GROUP_ID
​​facetas/<id>/atributo/id id_​string El ID de atributo interno correspondiente de la faceta actual; se correlaciona con FACET.ATTR_ID
​facetas/<id>/atributos/nombre id_​string El nombre de atributo específico del idioma correspondiente de la faceta actual
​facets/<id>/attribute/identifier id_​string El identificador de atributo correspondiente de la faceta actual; se correlaciona con ATTR.IDENTIFIER
​facets/<id>/attribute/displayable boolean Identifica si esta faceta debe visualizarse en el escaparate; se correlaciona con ATTR.DISPLAYABLE
​facets/<id>/attribute/swatchable boolean Identifica si esta faceta se puede utilizar con imágenes para las facetas; se correlaciona con ATTR.SWATCHABLE
facets/<id>atributo/cinta boolean ​Identifica si este atributo se puede utilizar como cinta para su visualización; correlacionado con ATTR. STOREDISPLAY​
​facets/<id>/attribute/usage raw Describe el uso de este atributo; se correlaciona con ATTR.ATTRUSAGE
​​facets/<id>/display/limit entero ​Los valores máximos que deben mostrarse en el escaparate de la faceta; se correlaciona con FACET.MAX_DISPLAY
​facets/<id>/display/zero boolean ​Describe si el atributo con facetas debe mostrar valores de recuento cero; se correlaciona con FACET.ZERO_DISPLAY
​facets/<id>/display/multiple boolean ​Describe si el atributo con facetas permite varias selecciones; se correlaciona con FACET.SELECTION
​facets/<id>/display/order entero ​El orden de visualización que debe utilizarse al mostrar los valores de la faceta; se correlaciona con FACET.SORT_ORDER

Por ejemplo, consulte los Etapa 2 ejemplos.

Etapa 3 - Creación de una jerarquía de catálogo para la navegación

Esta etapa describe cómo generar los datos de navegación y cargarlos en el índice de categoría. Empieza con la ejecución de la siguiente consulta de Elasticsearch con el índice de Categoría actual:​

{
  "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}"
          }
        }
      ]
    }
  }
}​
A continuación, el conjunto de resultados se pasa al procesador BuildCatalogHierarchyForCategory para su transformación y utiliza las siguientes lógicas para generar el árbol de navegación.
Note: El conjunto de resultados inicial de la consulta de búsqueda anterior devolverá todas las categorías de nivel superior del catálogo de ventas especificado. Utilizando todas las categorías hijo de este conjunto de categorías de nivel superior para generar otra consulta de Elasticsearch para buscar las categorías hijo del siguiente nivel del catálogo de ventas actual:
{
    "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 consulta anterior se enviará de nuevo al flujo de datos en NiFi para volver a ejecutarla.

Note: Para todos los nodos devueltos en el nivel actual en la jerarquía de catálogo, pase por cada categoría para generar la ruta de navegación completa en este catálogo de ventas actual:
​​Campo de índice​ Nombre​ Tipo de campo de índice Descripción:
​Datos de navegación​​​​
​category/child ​​id_string La categoría de ventas hijo de este documento actual utilizada para la secuencia; se correlaciona con CATGRPREL​.CATGROUP_ID_CHILD
​category/sequence float La secuencia de nivel de categoría de hoja (superficial) definida en CMC; se correlaciona con CATGRPREL.SEQUENCE
path RAW() Campo de señalización para la ruta de navegación completa a la categoría actual nodo en el catálogo de ventas. Por ejemplo, cuando una categoría "vestido" (ID: 10001) con la ruta "/1/3/10001" está indexada para el catálogo de ventas 10502, este campo almacena el formato original de la ruta.
path/tree jerarquía Es la versión con token para el campo de ruta anterior, por ejemplo, 1, 3, 10001
path/list raw Es la versión canónica para la lista de nombres del campo de ruta, p. ej. Aurora, mujer, vestido
Por ejemplo, consulte los Etapa 3 ejemplos.

Ejemplos de asignación de bases de datos:

Stage 1

El código siguiente es un ejemplo de los datos de entrada para el procesador CreateCategoryDocumentFromDatabase.

{
  "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           "
}
El procesador reateCategoryDocumentFromDatabase transforma los datos de entrada en los siguientes datos de salida:

{ "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
}

Etapa 2

El código siguiente es un ejemplo de los datos de entrada para el procesador FindFacetsForCategoryFromDatabase.

{
  "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"
}
El procesador FindFacetsForCategoryFromDatabase transforma los datos de entrada con store id, languages id y catalog id pasados de la clase NiFi FlowFile a los siguientes datos de salida:

{ "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"
      }
    }
  }
}

Etapa 3

El código siguiente es un ejemplo de los datos de entrada para el procesador BuildCatalogHierarchyForCategory.

{
  "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
          ]
        }
      }
    ]
  }
}

El procesador BuildCatalogHierarchyForCategory transforma estos datos de entrada en un conjunto de datos de salida, uno para la relación siguiente y otro para la relación de actualización tal como se muestra en el diagrama de flujo NiFi.

Se muestran los siguientes datos de salida de ejemplo para la siguiente relación:

{
  "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"
          }
        }
      ]
    }
  }
}
Se muestran los siguientes datos de salida de ejemplo para la relación de actualización:

{ "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"}} }