Canalización de índice de catálogo de Ingest

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

Correlación de campos de índice de Catálogo de la base de datos

La siguiente secuencia de pasos ilustra la canalización de indexación de Catálogo implementada en Apache NiFi. El flujo consta principalmente de dos etapas:
  1. Crear un documento de catálogo
  2. Asociar filtros de Catálogo

Paso 1 Crear un documento de catálogo

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 SQL siguiente para recuperar datos de Catálogo de la base de datos de Commerce.
SELECT C.CATALOG_ID, C.IDENTIFIER, C.MEMBER_ID, D.NAME, D.SHORTDESCRIPTION, 
            COALESCE(D.LANGUAGE_ID, L.LANGUAGE_ID) LANGUAGE_ID, 
            L.LOCALENAME, T.MASTERCATALOG, F.STOREENT_ID
		  FROM LANGUAGE L, STORELANG F, STORECAT T, CATALOG C
          LEFT OUTER JOIN CATALOGDSC D ON(C.CATALOG_ID = D.CATALOG_ID AND D.LANGUAGE_ID = ${param.langId})
		 WHERE T.STOREENT_ID IN (SELECT RELATEDSTORE_ID FROM STOREREL WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId})
            AND T.CATALOG_ID = C.CATALOG_ID  AND C.CATALOG_ID = ${param.catalogId}
		    AND F.STOREENT_ID = ${param.storeId} AND F.LANGUAGE_ID = L.LANGUAGE_ID AND L.LANGUAGE_ID = ${param.langId}	

A continuación, el conjunto de resultados se pasa al procesador CreateCatalogDocumentFromDatabase 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 Catálogo:

​​Campo de índice​ Nombre​ Tipo de campo de índice ​​Descripción:
​​Identificador del documento​​
id/​catalog id_string ID interno del catálogo de ventas de operaciones; se correlaciona con CATALOG.CATALOG_ID
​id/member ​id_string El número de referencia interno que identifica al propietario del catálogo; se correlaciona con CATALOG.MEMBER_ID
​id/language id_string​ El idioma utilizado para todos los datos específicos del idioma de este documento para la tienda actual; se correlaciona con CATALOGDSC.LANGUAGE_ID
​identifier/specification id_string Establecer en "​Catálogo"
identifier/​catalog id_string Una cadena que identifica de forma exclusiva el catálogo propietario; se correlaciona con CATALOG​​.IDENTIFIER
​identifier/language id_string La cadena de idioma de este idioma soportado; se correlaciona con CATALOGDSC​.LANGUAGE_ID y LANGUAGE.LANGUAGE
​​Datos sensibles al idioma​​​
​​name/raw raw El nombre que depende del idioma de este grupo de catálogo; se correlaciona con CATALOGDSC​​.NAME
​​name/normalized normalized Igual que anterior
​​description/raw raw Una descripción breve de este grupo de catálogo; se correlaciona con CATALOGDSC.SHORTDESCRIPTION
Propiedades
tipo id_string "master" como catálogo maestro o "sales" como catálogo de ventas; se correlaciona con STORECAT.MASTERCATALOG
Para ver un ejemplo de código, consulte Ejemplos de la etapa 1.

Etapa 2: Asociar filtros de Catálogo

Esta etapa describe cómo transformar los datos del filtro del catálogo y cargarlos en el índice del catálogo. Empieza con la ejecución del SQL siguiente para recuperar datos de catálogo de la base de datos de Commerce:
SELECT F.STOREENT_ID, F.CATALOG_ID, F.USAGE, F.CATFILTER_ID, F.IDENTIFIER, X.EXPRESSION_ID, X.MEMBER_ID,
	       CAST(X.QUERY AS VARCHAR) QUERY, X.TRADING_ID
		  FROM EXPRESSION X, CATFILTER F
	WHERE X.CATFILTER_ID = F.CATFILTER_ID
	AND F.CATALOG_ID IN (SELECT C.CATALOG_ID FROM STORECAT C​ WHERE C.MASTERCATALOG = 1
		                           AND C.STOREENT_ID IN (SELECT RELATEDSTORE_ID FROM STOREREL
			                                              WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId}))
        AND F.STOREENT_ID IN ( SELECT RELATEDSTORE_ID FROM STOREREL WHERE STATE = 1 AND STRELTYP_ID = -32 AND STORE_ID = ${param.storeId} )
​    
A continuación, el conjunto de resultados se pasa al procesador FindFiltersFromDatabase​ 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 Catálogo:​
​​Campo de índice​ Nombre​ Tipo de campo de índice ​​Descripción:
Filtros
​filters/id/filter ​id_string El identificador interno del filtro de catálogo que se aplica al catálogo actual
​filters/id/contract id_string​ ​El identificador interno del contrato que está asociado con este filtro de catálogo para el catálogo actual
​filters/id/member id_string​ El identificador interno del propietario que está asociado con este filtro de catálogo para el catálogo actual
​filters/id/expression​ raw El identificador interno de la expresión de este filtro de catálogo
​filters/identifier ​​id_string El identificador externo de este filtro de catálogo
​filters/query raw La cadena de consulta para representar este filtro de catálogo
​filters/usage raw El uso de este filtro de catálogo
Para ver un ejemplo de código, consulte Ejemplos de la etapa 2.

Ejemplos de la etapa 1

El código siguiente es un ejemplo de los datos de entrada para el procesador CreateCatalogDocumentFromDatabase:

{
  "CATALOG_ID": 10001,
  "IDENTIFIER": "Extended Sites Catalog Asset Store",
  "MEMBER_ID": 7000000000000001000,
  "NAME": "Extended Sites Catalog Asset Store",
  "SHORTDESCRIPTION": null,
  "LANGUAGE_ID": -1,
  "LOCALENAME": "en_US           ",
  "MASTERCATALOG": "1",
  "STOREENT_ID": 1
}
El procesador CreateCatalogDocumentFromDatabase transforma los datos de entrada en los siguientes datos de salida:

{ "update": { "_id": "1--1-10001", "_index": ".auth.1.catalog.202006160325", 
"retry_on_conflict": 5, "_source": false } }
{
  "doc": {
    "identifier": {
      "catalog": "Extended Sites Catalog Asset Store",
      "specification": "catalog",
      "language": "en_US"
    },
    "name": {
      "normalized": "Extended Sites Catalog Asset Store",
      "raw": "Extended Sites Catalog Asset Store"
    },
    "id": {
      "catalog": "10001",
      "member": "7000000000000001000",
      "language": "-1",
      "store": "1"
    },
    "type": "master",
    "__meta": {
      "created": "2020-07-28T18:42:27.926Z",
      "modified": "2020-07-28T18:42:27.942Z",
      "version": {
        "min": 0,
        "max": 0
      }
    }
  },
  "doc_as_upsert": true
}

Ejemplos de la etapa 2

El código siguiente es un ejemplo de los datos de entrada para el procesador FindFiltersFromDatabase.
{
  "STOREENT_ID": 1,
  "CATALOG_ID": 10001,
  "USAGE": null,
  "CATFILTER_ID": 3074457345616679000,
  "IDENTIFIER": "TestCatalogFilter",
  "EXPRESSION_ID": 3074457345618259500,
  "MEMBER_ID": null,
  "QUERY": "( +*:* -parentCatgroup_id_search:\"10001_10006\")",
  "TRADING_ID": null
}

El procesador FindFiltersFromDatabase transforma los datos de entrada con store id, language id y catalog id pasados de la clase NiFi FlowFile a los siguientes datos de salida:


{ "update": { "_id": "1--1-10001", "_index": ".auth.1.catalog.202006160325", 
"retry_on_conflict": 5, "_source": false } }
{
  "doc": {
    "filters": [
      {
        "identifier": "TestCatalogFilter",
        "usage": "",
        "query": "( +*:* -path.tree:\"10006\")",
        "id": {
          "filter": "3074457345616679000",
          "expression": "3074457345618259500",
          "contract": "",
          "member": ""
        }
      }
    ],
    "__meta": {
      "modified": "2020-07-28T18:54:46.440Z"
    }
  }
}