HCL Commerce Version 9.1.6.0 or later

Introducción de contenido no estructurado de archivos y de sitios web

Puede personalizar el servicio Ingest para permitirle rastrear datos del sitio web e introducir contenido seleccionado en Elasticsearch. Esta prestación se puede añadir en el contenedor HCL Commerce Search de NiFi V9.1.

About this task

Es posible que tenga que rastrear e introducir datos de contenido no estructurado de Internet. El contenido no estructurado El contenido del sitio no estructurado incluye documentos que no se adhieren a un modelo de datos específico, como adjuntos del producto contenidos en diversos formatos. Por ejemplo, el contenido como manuales de usuario e información de garantía se considera contenido no estructurado. Sus elementos, construcción y organización suelen ser desconocidos y pueden variar en función del tipo de archivo. puede incluir HTML, .docx, PDF y archivos .txt. Puede introducir estos datos creando un grupo de procesos de NiFi y asociando su salida con un índice de producto existente, o creando un nuevo índice personalizado e introduciendo los datos en un nuevo esquema.

Procedure

  1. Habilite el archivo adjunto en el contenedor de Elasticsearch (docker.elastic.co/elasticsearch/elasticsearch:7.x.0).
    1. Abra un indicador de mandatos dentro del contenedor Docker de Elasticsearch y emita el siguiente mandato.
      docker exec -it -u 0 commerce_elasticsearch_1 bash
    2. Ejecute el siguiente mandato desde dentro del terminal bash del contenedor.
      elasticsearch-plugin install ingest-attachment
    3. Reinicie el contenedor de Docker de Elasticsearch.
      docker restart commerce_elasticsearch_1
    Note: Puede añadir el mandato adjunto dentro del dockerfile. Si lo hace, debe crear una nueva imagen de Elasticearch a partir de la imagen base.
  2. Cree un directorio dentro del contenedor de NiFi (commerce/search-nifi-app:9.1.x.0). Este directorio se utilizará para guardar el contenido rastreado para la introducción en ES.
    Para crear el directorio, emita los mandatos siguientes:
    docker exec -it -u 0 commerce_nifi_1 bash
    mkdir /opt/NiFi/extDocs/
    chown nifi:nifi /opt/NiFi/extDocs
    chmod 755 /opt/NiFi/extDocs
  3. Importar los siguientes conectores al registro de tiempo de ejecución (commerce/search-registry-app:9.1.x.0).
    docker cp custom-crawl-StaticContentIndexSchemaUpdate.json commerce_registry_1:/opt/nifi-registry/flows/
    docker cp custom-crawl-StaticContentIndexSchemaUpdateConnector-attachment.json commerce_registry_1:/opt/nifi-registry/flows/ 
    docker cp custom-crawl-StaticContentIndexDatabaseConnectorPipe-Attachment.json commerce_registry_1:/opt/nifi-registry/flows/
    Abra el contenedor de registro de NiFi y ejecute el mandato siguiente.
    docker exec -it -u 0 commerce_registry_1 bash
    Ejecute los mandatos siguientes desde el terminal de registro.
    /opt/nifi-registry/scripts/import_flow.sh custom-crawl-StaticContentIndexSchemaUpdate 
        /opt/nifi-registry/flows/custom-crawl-StaticContentIndexSchemaUpdate.json 
    
    /opt/nifi-registry/scripts/import_flow.sh custom-crawl-StaticContentIndexSchemaUpdateConnector-attachment 
        /opt/nifi-registry/flows/custom-crawl-StaticContentIndexSchemaUpdateConnector-attachment.json
    
    /opt/nifi-registry/scripts/import_flow.sh custom-crawl-StaticContentIndexDatabaseConnectorPipe-Attachment 
        /opt/nifi-registry/flows/custom-crawl-StaticContentIndexDatabaseConnectorPipe-Attachment.json 

  4. Cree un conector mediante la interfaz Swagger de Ingest. POST en la siguiente URL con datos Json en el cuerpo.
    http://localhost:30800/connectors
    {  
        "name": "auth.staticcontent",  
        "description": "This is the connector for the staticcontent processing",  
        "pipes": [  
            {  
                "name": "custom-crawl-StaticContentIndexSchemaUpdate"  
            },  
        	{  
                "name": "custom-crawl-StaticContentIndexSchemaUpdateConnector-attachment"  
            }, 
        	{  
                "name": "custom-crawl-StaticContentIndexDatabaseConnectorPipe-Attachment",  
                "properties": [  
                    {  
                        "name": "Database Driver Location(s)",  
                        "value": "${AUTH_JDBC_DRIVER_LOCATION}",  
                        "scope": {  
                            "name": "Database Connection Pool",  
                            "type": "CONTROLLER_SERVICE"  
                        }  
                    },  
                    {  
                        "name": "Database Connection URL",  
                        "value": "${AUTH_JDBC_URL}",  
                        "scope": {  
                            "name": "Database Connection Pool",  
                            "type": "CONTROLLER_SERVICE"  
                        }  
                    },  
                    {  
                        "name": "Database User",  
                        "value": "${AUTH_JDBC_USER_NAME}",  
                        "scope": {  
                            "name": "Database Connection Pool",  
                            "type": "CONTROLLER_SERVICE"  
                        }  
                    },  
                    {  
                        "name": "Password",  
                        "value": "${AUTH_JDBC_USER_PASSWORD}",  
                        "scope": {  
                            "name": "Database Connection Pool",  
                            "type": "CONTROLLER_SERVICE"  
                        }  
                    }  
                ]  
            },  
        	{  
                "name": "Terminal"  
            } 
        ]  
    }
    
  5. Después de ejecutar el conector, las cuatro canalizaciones de grupo de procesos siguientes estarán disponibles en NiFi, Añadir el grupo de procesos en el panel de control NiFi y conectar los puertos de entrada/salida tal como se muestra en la imagen siguiente.

    Configure los cuatro grupos de procesos como se indica a continuación.

    custom-UnstructuredIndexSchemaUpdate
    Este grupo de procesos se utilizará para establecer un nuevo esquema. Se omitirá si el esquema ya está disponible en Elasticsearch. Puede utilizar un esquema existente y simplemente actualizar el nombre de índice en el siguiente archivo de propiedades para que el procesador establezca un nombre de esquema no estructurado.

    custom-UnstructuredIndexSchemaUpdateConnector-attachment
    Este grupo de procesos se utilizará para habilitar el ajuste de archivos adjuntos en Elasticsearch. Se omitirá si el ajuste de archivos adjuntos ya está disponible.

    El ajuste siguiente se ha utilizado de forma predeterminada.

    El parámetro param.attach está disponible en el procesador de Set staticcontent attachment.

    El siguiente JSON está disponible en el procesador 'Populate StaticContent Index schema'.

    Aquí podemos añadir/actualizar palabras clave, estas palabras clave se utilizarán para introducir/buscar datos no estructurados/estáticos.
    {
      "description" : "Extract attachment information",
      "processors" : [
        {
          "attachment" : {
            "field" : "data",
            "indexed_chars_field" : "max_size",
            "properties": [ "content", "title", "keywords", "content_type", "content_length" ]
          }
        }
      ]
    }
    
    custom-UnstructuredIndexDatabaseConnectorPipe-Attachment
    Este grupo de procesos se está utilizando para captar la ubicación de archivo de una base de datos. Lee el contenido del archivo de un directorio mencionado en la base de datos, lo codifica en base64 e introduce el contenido del archivo en Elasticsearch.

    Este grupo de procesos tiene varios procesadores para introducir los archivos en Elasticsearch.

    El procesador Set Attribute establece el parámetro que se utilizará para procesar este archivo. Puede actualizarlo según sea necesario.

    Terminal
    Este grupo de procesos finaliza el flujo de proceso y es necesario para terminar la salida del proceso anterior.
  6. Ejecute las consultas siguientes para establecer la ubicación del archivo en Catentry.field4. Puede modificar las consultas y añadir varias transacciones según sea necesario para establecer la ubicación del archivo para las entradas del catálogo.
    UPDATE catentry SET FIELD4 = '/opt/nifi/extDocs/SampleDocs-travel-laptop.docx' WHERE PARTNUMBER = 'CLA022_2203'
    UPDATE catentry SET FIELD4 = '/opt/nifi/extDocs/SampleDocs-office-laptop.ppt' WHERE PARTNUMBER = 'CLA022_2205'
    
    Note: Si desea establecer la ubicación del archivo en una tabla diferente, modifique las propiedades siguientes en el procesador Set Attribute en custom-UnstructuredIndexDatabaseConnectorPipe-Attachment. Puede actualizar las consultas según sea necesario.
    SELECT COUNT(*) as count FROM CATENTRY CE, CATENTDESC CD 
    WHERE CE.CATENTRY_ID = CD.CATENTRY_ID  AND CD.LANGUAGE_ID =-1 AND CE.MARKFORDELETE =0 AND CE.BUYABLE =1 AND CD.PUBLISHED =1 AND ce.FIELD4 IS not NULL
    AND CE.CATENTRY_ID IN (SELECT C.CATENTRY_ID FROM CATGPENREL R, CATENTRY C
    	                           WHERE 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.CATENTRY_ID = C.CATENTRY_ID AND C.MARKFORDELETE = 0 AND C.CATENTTYPE_ID <> 'ItemBean')
    
    SELECT CE.CATENTRY_ID, CE.PARTNUMBER , CE.FIELD4, CD.NAME, CD.SHORTDESCRIPTION , CD.PUBLISHED FROM CATENTRY CE, CATENTDESC CD 
    WHERE CE.CATENTRY_ID = CD.CATENTRY_ID  AND CD.LANGUAGE_ID =-1 AND CE.MARKFORDELETE =0 AND CE.BUYABLE =1 AND CD.PUBLISHED =1 AND ce.FIELD4 IS not NULL
    AND CE.CATENTRY_ID IN (SELECT C.CATENTRY_ID FROM CATGPENREL R, CATENTRY C
    	                           WHERE 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.CATENTRY_ID = C.CATENTRY_ID AND C.MARKFORDELETE = 0 AND C.CATENTTYPE_ID <> 'ItemBean')
    
    Note: Si desea actualizar el nombre del esquema en el que se introducirá el archivo adjunto, modifique las siguientes propiedades en el procesador Set Attribute en custom-UnstructuredIndexDatabaseConnectorPipe-Attachment.

  7. Conecte el grupo de procesos auth.unstructured - custom-UnstructuredIndexSchemaUpdate con el grupo de procesos Routing Service con INPUT auth.unstructured.
    Note: Este proceso ya debe estar conectado al servicio de direccionamiento si se sigue el proceso del conector. Verifique que la ruta auth.unstructured esté disponible.
  8. Vaya al grupo de procesos Flujo de NiFi > personalizado: DatabaseCustomConnectorPipe > Conducto de conector personalizado > Ejecutar SQL e Invocar búsqueda.

    Seleccione el procesador Execute SQL, pulse el botón derecho del ratón, seleccione Ver configuración y, a continuación, seleccione el botón de flecha situado a la derecha de la propiedad Servicio de agrupación de conexiones de base de datos.

    Asegúrese de que el servicio de agrupación Database Connection está habilitado.

  9. Inicie los cuatro grupos de procesos y, a continuación, vaya a dentro de cada grupo de procesos. Haga clic con el botón derecho en el flujo de NiFi y seleccione Habilitar transmisión.
    Note: Es posible que las transmisiones ya estén habilitadas.
  10. Después de iniciar los grupos de procesos, PUBLIQUE en la URL siguiente.
    https://localhost:5443/wcs/resources/admin/index/dataImport/build?connectorId=auth.unstructured&storeId=1
    Para comprobar el estado, emita un OBTENER en la URL siguiente:
    https://localhost:5443/wcs/resources/admin/index/dataImport/status?jobStatusId=1036

Results

El servicio Ingest está ahora configurado para rastrear sitios de Internet e indexar su contenido utilizando Elasticsearch.

What to do next

Para verificar que está indexando correctamente estos datos no estructurados, PUBLIQUE el mandato siguiente:
localhost:30200/.auth.1.unstructured/_search
Para el cuerpo de la publicación, pruebe los diferentes componentes de índice utilizando lo siguiente:
{ "query": { "bool": { 

 "must": [
                {
                    "query_string": {
                        "query": "lightweight"
                    }
                }
            ]

} } }
Cuerpo con SKU (número de pieza):
{ "query": { "bool": { 

 "must": [
                {
                    "query_string": {
                        "query": "CLA022_2205"
                    }
                }
            ]

} } }
Cuerpo con extensión de archivo:
{ "query": { "bool": { 

 "must": [
                {
                    "query_string": {
                        "query": "docx"
                    }
                }
            ]

} } }