Descripción General
El conector de base de datos permite registrar en el índice de Fess los registros de bases de datos relacionales compatibles con JDBC (MySQL, PostgreSQL, Oracle, SQL Server, etc.), haciendo posible la búsqueda en bases de datos (búsqueda de texto completo sobre el contenido de la base de datos). Cada columna obtenida mediante una sentencia SELECT se asigna a un campo de búsqueda durante el registro.
El conector de base de datos proporciona funcionalidad para obtener datos de bases de datos relacionales compatibles con JDBC y registrarlos en el índice de Fess.
Esta funcionalidad requiere el plugin fess-ds-db.
Bases de Datos Compatibles
Compatible con todas las bases de datos que soporten JDBC. Ejemplos principales:
MySQL / MariaDB
PostgreSQL
Oracle Database
Microsoft SQL Server
SQLite
H2 Database
Requisitos Previos
Se requiere instalar el plugin
fess-ds-dbSe requiere el controlador JDBC correspondiente a la base de datos de destino
Se requiere acceso de lectura a la base de datos
Para grandes volúmenes de datos, es importante un diseño de consultas apropiado
Instalación del Plugin
Método 1: Instalar desde la consola de administración
Abrir «Sistema» -> «Plugins»
Subir el archivo JAR
Reiniciar Fess
Método 2: Colocar el archivo JAR directamente
Instalación del Controlador JDBC
El controlador JDBC no se incluye en el plugin. Obtenga por separado el controlador correspondiente a su base de datos y colóquelo usted mismo.
El rastreo del almacén de datos se ejecuta en el proceso del rastreador, por lo que el controlador debe estar en el classpath del proceso del rastreador. Sirve cualquiera de estos directorios:
app/WEB-INF/lib/app/WEB-INF/env/crawler/lib/
Después de colocar el controlador JDBC, reinicie Fess para cargarlo.
Nota
Cuando falta el controlador, el rastreo falla con el mensaje The JDBC driver ... is not on the crawler classpath.
Método de Configuración
Configure desde la consola de administración en «Rastreador» -> «Almacén de Datos» -> «Crear Nuevo».
Configuración Básica
| Elemento | Ejemplo de Configuración |
|---|---|
| Nombre | Products Database |
| Nombre del Manejador | DatabaseDataStore |
| Habilitado | Activado |
Configuración de Parámetros
Ejemplo MySQL/MariaDB:
Ejemplo PostgreSQL:
Lista de Parámetros
| Parámetro | Requerido | Descripción |
|---|---|---|
driver | Si | Nombre de la clase del controlador JDBC (si no se especifica, se produce DataStoreException) |
url | Si | URL de conexión JDBC (obligatorio para la conexión) |
sql | Si | Consulta SQL para obtener datos (si no se especifica, se produce DataStoreException) |
username | No | Nombre de usuario de la base de datos |
password | No | Contraseña de la base de datos |
fetch_size | No | Tamaño de recuperación JDBC. MIN_VALUE indica a MySQL que lea el conjunto de resultados fila a fila; otros controladores rechazan los valores negativos y el rastreo continúa con el valor predeterminado del controlador tras emitir una advertencia. Los valores negativos o no numéricos se notifican y se ignoran |
query_timeout | No | Tiempo de espera de la consulta en segundos. 0 significa sin límite (el valor predeterminado de JDBC). Si el parámetro no se especifica, no se establece ningún tiempo de espera |
default_mimetype | No | Tipo MIME predeterminado utilizado al extraer contenido de columnas BLOB o binarias |
column_label.mimetype | No | Nombre de la columna que contiene el tipo MIME utilizado para la extracción de columnas BLOB o binarias (ej. column_label.mimetype=content_type) |
column_label.filename | No | Nombre de la columna que contiene el nombre de archivo utilizado para la extracción de columnas BLOB o binarias (el tipo MIME se infiere a partir de la extensión) |
info.* | No | Propiedades adicionales de conexión JDBC (ej. info.ssl=true). La clave sin el prefijo info. se pasa al controlador JDBC |
readInterval | No | Retardo en milisegundos entre el procesamiento de cada fila. Predeterminado: 0 |
script_type | No | Tipo de motor de scripts. Una configuración nueva viene rellenada con |
Nota
Si una consulta se queda bloqueada, detener el trabajo no libera el hilo del rastreador. La solicitud de parada solo se comprueba entre filas, por lo que no puede interrumpir una llamada bloqueada dentro del controlador. Establezca query_timeout para las consultas que puedan tardar mucho.
Configuración de Script
Mapee los nombres de columnas SQL a campos del índice:
Campos disponibles:
<nombre_columna>- Columnas de resultado de la consulta SQL (se accede directamente por el nombre de la etiqueta de columna; no se usa prefijo comodata.)crawlingConfig- la configuración del almacén de datoscrawlingContext- el contexto del rastreo;crawlingContext.doccontiene el documento que se está construyendo
Nota
Los nombres de columna deben coincidir con la etiqueta de columna (alias) de la cláusula SELECT. Cuando se usen funciones de agregación o expresiones, asigne un alias explícito con AS (ej. COUNT(*) AS total).
Nota
El uso de mayúsculas y minúsculas en las etiquetas de columna varía según la base de datos. PostgreSQL convierte a minúsculas los identificadores sin comillas, H2 los convierte a mayúsculas y MySQL los devuelve tal como se declararon. Un nombre que no se resuelve deja el campo sin asignar en lugar de generar un error, así que asigne un alias explícito con AS cuando la portabilidad sea importante.
Advertencia
Los scripts pueden referenciar todo el mapa de parámetros del almacén de datos, no solo las columnas de resultado de la consulta SQL. driver, url, username, password y sql son visibles como variables con el mismo nombre, por lo que una columna puede quedar ocultada de forma involuntaria, o el valor de un parámetro puede aparecer donde se esperaba una columna inexistente. Cuando existen ambos, prevalece el valor de la columna.
Carga de Datos BLOB o Binarios
Las columnas binarias (BLOB, BYTEA, arrays de bytes y flujos binarios) se procesan mediante el extractor de contenido (el mismo que se usa en el rastreo de archivos) y se incorporan como texto.
CLOB, NCLOB y los flujos de caracteres no pasan por ningún extractor. Se leen tal cual como texto, y las indicaciones de tipo MIME descritas a continuación no se les aplican.
Las columnas de tipo array se convierten en sus elementos unidos por espacios. Los valores NULL se convierten en cadenas vacías.
Nota
Que una columna BLOB llegue como java.sql.Blob o como array de bytes lo decide el controlador JDBC: MySQL y PostgreSQL devuelven un array de bytes. Ambos se extraen de la misma manera.
Nota
CLOB y NCLOB se leen enteros en memoria, sin límite de tamaño. Para columnas de texto muy grandes, considere truncarlas en el SQL con SUBSTRING o similar. La ruta que pasa por el extractor si respeta la longitud máxima de contenido del rastreador.
Para extraer correctamente el texto de datos BLOB o flujos binarios, es necesario determinar el tipo de dato (tipo MIME). La determinación sigue el siguiente orden de prioridad:
column_label.mimetype=<nombre_columna>- Usa el valor de la columna indicada como tipo MIMEcolumn_label.filename=<nombre_columna>- Trata el valor de la columna indicada como nombre de archivo e infiere el tipo MIME a partir de la extensióndefault_mimetype- Tipo MIME predeterminado usado cuando no se puede determinar con los métodos anteriores
Ejemplo (extracción del BLOB de la columna file_data usando el tipo MIME de la columna content_type):
Diseño de Consultas SQL
Consultas Eficientes
Al manejar grandes cantidades de datos, el rendimiento de la consulta es importante. La consulta SQL se envía tal cual a la base de datos (no se realiza enlace de parámetros):
Rastreo Incremental
Método para obtener solo registros actualizados:
Advertencia
Restringir la consulta de esta manera no convierte el rastreo en incremental. Cuando un rastreo termina, Fess elimina los documentos de esta configuración del almacén de datos que no formaron parte del rastreo que acaba de ejecutarse, de modo que una consulta filtrada deja en el índice únicamente las filas coincidentes.
Añada delete_old_docs=false a los parámetros del almacén de datos para conservar los documentos indexados por rastreos anteriores. Las filas eliminadas de la base de datos dejan entonces de eliminarse también del índice, así que ejecute periódicamente un rastreo completo.
Generación de URLs
Las URLs de documentos se generan en el script:
Advertencia
url=url solo hace lo que parece cuando el resultado de SELECT tiene una columna etiquetada como url. Si no existe esa columna, el parámetro del almacén de datos con el mismo nombre, es decir, la URL de conexión JDBC, se convierte en la URL del documento. Asigne un alias a la columna, como en SELECT page_url AS url, o indíquela en el script, como en url=page_url.
Soporte de Caracteres Multibyte
Al manejar datos con caracteres multibyte como japonés u otros idiomas:
MySQL
PostgreSQL
PostgreSQL normalmente usa UTF-8 de forma predeterminada. Si es necesario:
Seguridad
Protección de Credenciales de Base de Datos
Advertencia
Escribir contraseñas directamente en archivos de configuración es un riesgo de seguridad.
Métodos recomendados:
Aprovechar el cifrado automático
El valor de un parámetro cuyo nombre coincide con
app.encrypt.property.pattern(predeterminado.*password|.*key|.*token|.*secret) se cifra al guardarlo desde la consola de administración y se almacena con el prefijo{cipher}.passwordcoincide con ese patrón, por lo que no se almacena en texto plano cuando se establece desde la consola de administración.Usar variables de entorno
Una variable de entorno cuyo nombre empieza por
FESS_ENV_se expande dentro de un parámetro del almacén de datos como${nombre de la variable}:Qué nombres se expanden lo controla
crawler.data.env.param.key.pattern(predeterminado^FESS_ENV_.*).Usar usuarios de solo lectura
Nota
Subir org.codelibs.fess.ds a DEBUG no expone las credenciales: los valores de los parámetros que coinciden con app.encrypt.property.pattern, y las credenciales incrustadas en la URL JDBC, se enmascaran en el registro.
Principio de Mínimo Privilegio
Otorgue solo los permisos mínimos necesarios al usuario de la base de datos:
Ejemplos de Uso
Búsqueda de Catálogo de Productos
Parámetros:
Script:
Artículos de Base de Conocimientos
Parámetros:
Script:
Solución de Problemas
Cuando un rastreo falla, el mensaje del registro identifica qué paso ha fallado.
Controlador JDBC No Encontrado
Síntoma: The JDBC driver ... is not on the crawler classpath.
Solución:
Verifique que el controlador JDBC esté colocado en
app/WEB-INF/lib/oapp/WEB-INF/env/crawler/lib/Verifique que el nombre de clase indicado en
driversea correctoReinicie Fess
Error de Conexión
Síntoma: Failed to connect to <URL>.
Verifique:
La base de datos está en ejecución
El nombre del host y número de puerto son correctos
El nombre de usuario y contraseña son correctos
Configuración del firewall
Error de Consulta
Síntoma: Failed to execute the query.
Verifique:
Ejecute la consulta SQL directamente en la base de datos para probar
Verifique que los nombres de columna sean correctos
Verifique que los nombres de tabla sean correctos
Parámetros Faltantes
Síntoma: The driver parameter is required., The url parameter is required. o The sql parameter is required.
Falta un parámetro obligatorio. Revise el campo de parámetros.
Solo Fallan Algunas Filas
Una fila que falla no detiene el rastreo; queda registrada en «Sistema» -> «URL con Errores». Se usa la URL del documento cuando los scripts la generaron, y datastore://<id de la configuracion del almacen de datos>/<numero de fila> cuando no.
Los Documentos No Aparecen en los Resultados de Búsqueda
Verifique que los scripts establezcan
url,titleycontentVerifique que el uso de mayúsculas y minúsculas de las etiquetas de columna coincida con el que usan los scripts (véase «Configuración de Script»)
Revise el número de documentos en el registro del trabajo de rastreo
Información de Referencia
Descripción General de los Conectores de Almacén de Datos - Descripción General de Conectores de Almacén de Datos
Conector CSV - Conector CSV
Conector JSON - Conector JSON
Rastreo de Almacén de Datos - Guía de Configuración de Almacén de Datos
Configuración del Rastreador: Rastreo Web, de Servidores de Archivos y de Bases de Datos