Descripcion general
El conector JSON proporciona la funcionalidad para obtener datos de archivos JSON o archivos JSONL locales y registrarlos en el indice de Fess.
Esta funcionalidad requiere el plugin fess-ds-json.
Requisitos previos
Es necesario instalar el plugin
Se requiere acceso a los archivos JSON
Es necesario comprender la estructura del JSON
Instalacion del plugin
Metodo 1: Colocar el archivo JAR directamente
# Descargar desde Maven Central
wget https://repo1.maven.org/maven2/org/codelibs/fess/fess-ds-json/X.X.X/fess-ds-json-X.X.X.jar
# Colocar
cp fess-ds-json-X.X.X.jar $FESS_HOME/app/WEB-INF/lib/
# o
cp fess-ds-json-X.X.X.jar /usr/share/fess/app/WEB-INF/lib/
Metodo 2: Instalar desde la pantalla de administracion
Abrir «Sistema» -> «Plugins»
Subir el archivo JAR
Reiniciar Fess
Configuracion
Configure desde la pantalla de administracion en «Crawler» -> «Data Store» -> «Crear nuevo».
Configuracion basica
| Campo | Ejemplo |
|---|---|
| Nombre | Products JSON |
| Handler | JsonDataStore |
| Habilitado | Activado |
Configuracion de parametros
Archivo local:
files=/path/to/data.json
fileEncoding=UTF-8
Multiples archivos:
files=/path/to/data1.json,/path/to/data2.json
fileEncoding=UTF-8
Especificacion de directorio:
directories=/path/to/json_dir/
fileEncoding=UTF-8
Lista de parametros
| Parametro | Requerido | Descripcion |
|---|---|---|
files | No | Ruta del archivo JSON (multiples separados por comas) |
directories | No | Ruta del directorio que contiene archivos JSON |
fileEncoding | No | Codificacion de caracteres (predeterminado: UTF-8) |
Advertencia
Es necesario especificar files o directories. Si no se especifica ninguno, se producira un DataStoreException. Si se especifican ambos, files tiene prioridad y directories se ignora.
Nota
Este conector solo admite archivos JSON en el sistema de archivos local. No es compatible con acceso HTTP ni funciones de autenticacion de API.
Configuracion de scripts
Objeto JSON simple:
url="https://example.com/product/" + data.id
title=data.name
content=data.description
price=data.price
category=data.category
Objeto JSON anidado:
url="https://example.com/product/" + data.id
title=data.product.name
content=data.product.description
price=data.product.pricing.amount
author=data.product.author.name
Procesamiento de elementos de array:
url="https://example.com/article/" + data.id
title=data.title
content=data.body
tags=data.tags.join(", ")
categories=data.categories[0].name
Campos disponibles
data.<nombre_campo>- Campo del objeto JSONdata.<padre>.<hijo>- Objeto anidadodata.<array>[<indice>]- Elemento de arraydata.<array>.<metodo>- Metodos de array (join, length, etc.)
Detalles del formato JSON
Formato de archivo JSON
El conector JSON lee archivos en formato JSONL (JSON Lines). Es un formato en el que se escribe un objeto JSON por linea.
Nota
Los archivos JSON en formato de array ( [{...}, {...}] ) no se pueden leer directamente. Convierta al formato JSONL.
Archivo en formato JSONL:
{"id": 1, "name": "Product A", "description": "Description A"}
{"id": 2, "name": "Product B", "description": "Description B"}
Ejemplos de uso
Catalogo de productos
Parametros:
files=/var/data/products.json
fileEncoding=UTF-8
Scripts:
url="https://shop.example.com/product/" + data.product_id
title=data.name
content=data.description + " Precio: " + data.price + " EUR"
digest=data.category
price=data.price
Integracion de multiples archivos JSON
Parametros:
files=/var/data/data1.json,/var/data/data2.json
fileEncoding=UTF-8
Scripts:
url="https://example.com/item/" + data.id
title=data.title
content=data.content
Solucion de problemas
Archivo no encontrado
Sintoma: FileNotFoundException
Verificar:
Verificar que la ruta del archivo sea correcta
Verificar que el archivo exista
Verificar los permisos de lectura del archivo
Error de analisis JSON
Sintoma: JsonParseException o Unexpected character
Verificar:
Verificar que el archivo JSON tenga el formato correcto:
# Validacion de JSON cat data.json | jq .
Verificar la codificacion de caracteres
Verificar que no haya caracteres o saltos de linea no validos
Verificar que no contenga comentarios (no permitidos en el estandar JSON)
No se obtienen datos
Sintoma: El crawl se completa con exito pero el recuento es 0
Verificar:
Verificar la estructura JSON
Verificar la configuracion de scripts
Verificar los nombres de campo (incluyendo mayusculas y minusculas)
Verificar los mensajes de error en los registros
Archivos JSON grandes
Sintoma: Falta de memoria o tiempo de espera agotado
Solucion:
Dividir el archivo JSON en varios archivos
Aumentar el tamano del heap de Fess
Uso avanzado de scripts
Procesamiento condicional
Cada campo se evalua como una expresion independiente. Para valores condicionales, utilice el operador ternario:
url=data.status == "published" ? "https://example.com/product/" + data.id : null
title=data.status == "published" ? data.name : null
content=data.status == "published" ? data.description : null
price=data.status == "published" ? data.price : null
Union de arrays
url="https://example.com/article/" + data.id
title=data.title
content=data.content
tags=data.tags ? data.tags.join(", ") : ""
categories=data.categories.collect { it.name }.join(", ")
Configuracion de valores predeterminados
url="https://example.com/item/" + data.id
title=data.title ?: "Sin titulo"
content=data.description ?: (data.summary ?: "Sin descripcion")
price=data.price ?: 0
Formato de fechas
url="https://example.com/post/" + data.id
title=data.title
content=data.body
created=data.created_at
last_modified=data.updated_at
Procesamiento de numeros
url="https://example.com/product/" + data.id
title=data.name
content=data.description
price=data.price as Float
stock=data.stock_quantity as Integer
Informacion de referencia
Descripcion General de los Conectores de Almacen de Datos - Descripcion general de conectores de Data Store
Conector CSV - Conector CSV
Conector de Base de Datos - Conector de base de datos
Rastreo de Almacén de Datos - Guia de configuracion de Data Store