Descripción general
El conector Elasticsearch/OpenSearch proporciona la funcionalidad para obtener datos de un cluster de Elasticsearch u OpenSearch y registrarlos en el índice de Fess.
Esta funcionalidad requiere el plugin fess-ds-elasticsearch.
Versiones compatibles
Elasticsearch 7.x / 8.x
OpenSearch 1.x / 2.x
Requisitos previos
Es necesario instalar el plugin
Se requiere acceso de lectura al cluster de Elasticsearch/OpenSearch
Se necesitan permisos para ejecutar consultas
Instalación del plugin
Método 1: Colocar el archivo JAR directamente
Método 2: Instalar desde la pantalla de administración
Abrir «Sistema» -> «Plugins»
Subir el archivo JAR
Reiniciar Fess
Configuración
Configure desde la pantalla de administración en «Crawler» -> «Data Store» -> «Crear nuevo».
Configuración básica
| Campo | Ejemplo |
|---|---|
| Nombre | External Elasticsearch |
| Handler | ElasticsearchDataStore / ElasticsearchListDataStore |
| Habilitado | Activado |
Nota
ElasticsearchListDataStore es una extensión de ElasticsearchDataStore que procesa los datos obtenidos como una lista de archivos y soporta el registro en el índice con múltiples hilos. El número de hilos se puede especificar con el parámetro numOfThreads (predeterminado: 1).
Configuración de parámetros
Conexión básica:
Conexión con autenticación:
Lista de parámetros
| Parámetro | Requerido | Descripción |
|---|---|---|
settings.http.hosts | No | URL del host de Elasticsearch/OpenSearch. Se pueden especificar múltiples hosts separados por comas (ej: http://host1:9200,http://host2:9200). Si no se especifica, se produce un error de conexión |
settings.fesen.username | No | Nombre de usuario para autenticación |
settings.fesen.password | No | Contraseña para autenticación |
index | No | Nombre del índice objetivo (predeterminado: _all). Se pueden especificar múltiples índices separados por comas |
size | No | Cantidad de registros obtenidos por scroll (si no se especifica, se usa el valor predeterminado del servidor Elasticsearch/OpenSearch) |
scroll | No | Timeout del scroll (predeterminado: 1m) |
timeout | No | Timeout de la solicitud (predeterminado: 1m) |
query | No | Query en JSON (predeterminado: match_all). Especificar solo el cuerpo de la query (el wrapper externo {"query":...} no es necesario) |
fields | No | Campos a obtener (separados por comas) |
preference | No | Preferencia de replica de shard para la ejecución de búsqueda (predeterminado: _local) |
delete.processed.doc | No | Si se eliminan los documentos procesados del índice fuente (predeterminado: false) |
readInterval | No | Tiempo de espera entre el procesamiento de cada documento en milisegundos (predeterminado: 0) |
numOfThreads | No | Número de hilos para el registro en el índice (válido solo para ElasticsearchListDataStore, predeterminado: 1) |
Parámetros adicionales de conexión
Los parámetros con el prefijo settings. se pasan como configuración del cliente interno de Elasticsearch/OpenSearch (cliente HTTP de fesen). Las principales configuraciones adicionales son las siguientes.
| Parámetro | Descripción |
|---|---|
settings.http.ssl.certificate_authorities | Ruta al archivo de certificado CA de confianza (formato X.509) para conexiones HTTPS |
settings.http.compression | Si se habilita la compresión HTTP (predeterminado: true) |
settings.http.proxy_host | Nombre de host del servidor proxy (también se puede especificar settings.https.proxy_host) |
settings.http.proxy_port | Número de puerto del servidor proxy (también se puede especificar settings.https.proxy_port) |
settings.http.proxy_username | Nombre de usuario para autenticación del proxy (también se puede especificar settings.https.proxy_username) |
settings.http.proxy_password | Contraseña para autenticación del proxy (también se puede especificar settings.https.proxy_password) |
Configuración de scripts
Mapeo básico:
Acceso a campos anidados:
Campos disponibles
source.<field_name>- Campo_sourcedel documento de Elasticsearchid- ID del documentoindex- Nombre del índicescore- Puntuación de búsquedaversion- Versión del documentoseqNo- Número de secuenciaprimaryTerm- Termino primarioclusterAlias- Alias del cluster (para búsqueda entre clusters)hit- Objeto SearchHit (uso avanzado)
Configuración de consultas
Obtener todos los documentos
Por defecto se obtienen todos los documentos. Si no se especifica el parámetro query, se usa match_all.
Filtrado con condiciones específicas
Especificación de rango:
Múltiples condiciones:
Nota
El parámetro query solo acepta el cuerpo de la query. El wrapper externo {"query":...} no es necesario. Las opciones a nivel de búsqueda como ordenamiento no pueden especificarse en este parámetro.
Obtener solo campos específicos
Limitar campos a obtener con el parámetro fields
Para obtener todos los campos, no especifique fields o déjelo vacío.
Ejemplos de uso
Crawl básico de índice
Parámetros:
Script:
Crawl desde cluster con autenticación
Parámetros:
Script:
Crawl desde múltiples índices
Parámetros:
Script:
Crawl de cluster OpenSearch
Parámetros:
Script:
Crawl con campos limitados
Parámetros:
Script:
Balanceo de carga con múltiples hosts
Al especificar múltiples hosts separados por comas en settings.http.hosts, las solicitudes se distribuyen entre cada host.
Parámetros:
Script:
Solución de problemas
Error de conexión
Síntoma: Connection refused o No route to host
Verificaciones:
Verificar que la URL del host sea correcta (protocolo, nombre de host, puerto)
Confirmar que Elasticsearch/OpenSearch este ejecutándose
Verificar la configuración del firewall
En caso de HTTPS, verificar que el certificado sea válido
Error de autenticación
Síntoma: 401 Unauthorized o 403 Forbidden
Verificaciones:
Verificar que el nombre de usuario y contraseña sean correctos
Confirmar que el usuario tenga los permisos apropiados:
Permisos de lectura en el índice
Permisos para usar la API de scroll
Si Elasticsearch Security (X-Pack) está habilitado, verificar la configuración correcta
Índice no encontrado
Síntoma: index_not_found_exception
Verificaciones:
Verificar que el nombre del índice sea correcto (incluyendo mayúsculas/minúsculas)
Confirmar que el índice existe:
Verificar que el patrón de comodín sea correcto (ej:
logs-*)
Error de consulta
Síntoma: parsing_exception o search_phase_execution_exception
Verificaciones:
Verificar que el JSON de la consulta sea correcto
Confirmar que la consulta sea compatible con la versión de Elasticsearch/OpenSearch
Verificar que los nombres de campo sean correctos
Probar ejecutando la consulta directamente en Elasticsearch/OpenSearch:
Timeout de scroll
Síntoma: No search context found o Scroll timeout
Solución:
Aumentar el
scroll:Reducir el
size:Verificar los recursos del cluster
Crawl de grandes volúmenes de datos
Síntoma: El crawl es lento o tiene timeout
Solución:
Ajustar
size(demasiado grande puede hacerlo lento):Limitar los campos a obtener con
fieldsFiltrar solo los documentos necesarios con
queryDividir en múltiples data stores (por índice, por rango de tiempo, etc.)
Memoria insuficiente
Síntoma: OutOfMemoryError
Solución:
Reducir
sizeLimitar los campos a obtener con
fieldsAumentar el tamaño del heap de Fess
Excluir campos grandes (datos binarios, etc.)
Conexión SSL/TLS
En caso de certificado autofirmado
Advertencia
Use certificados firmados adecuadamente en entornos de producción.
Método 1: Especificar el certificado CA con el parámetro settings.http.ssl.certificate_authorities (recomendado)
Especifique la ruta al archivo de certificado CA de confianza (formato X.509). Este método no afecta al keystore global de Fess.
Método 2: Agregar el certificado al keystore de Java
Agregue el certificado al almacén de confianza de la JVM que inicia Fess.
Conexión a través de proxy
Para conectarse a través de un servidor proxy, especifique settings.http.proxy_host y settings.http.proxy_port.
Ejemplos de consultas avanzadas
Consulta con agregación
Nota
El parámetro query solo acepta el cuerpo de la query. Agregaciones (aggs), ordenamiento y otras opciones a nivel de búsqueda no pueden especificarse. Solo se obtienen los documentos.
Campos de script
Nota
Los campos de script de Elasticsearch/OpenSearch no están incluidos en _source, por lo que no se puede acceder a ellos mediante el prefijo source.*. Para usar campos de script, acceda a ellos mediante el objeto hit usando hit.getFields().
Información de referencia
Descripción General de los Conectores de Almacén de Datos - Descripción general de conectores de Data Store
Conector de Base de Datos (Búsqueda en Bases de Datos) - Conector de base de datos
Rastreo de Almacén de Datos - Guía de configuración de Data Store