Arquitectura y Estructura del Código
Esta página explica la arquitectura, estructura del código, y componentes principales de Fess. Al comprender la estructura interna de Fess, puede proceder con el desarrollo de manera eficiente.
Arquitectura General
Fess se compone de los siguientes componentes principales:
┌─────────────────────────────────────────────────┐
│ Interfaz de Usuario │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Pantalla de │ │ Pantalla de │ │
│ │ Búsqueda │ │ Administración │ │
│ │ (JSP/HTML) │ │ (JSP/HTML) │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Capa de Aplicación Web │
│ ┌──────────────────────────────────────────┐ │
│ │ LastaFlute │ │
│ │ ┌────────┐ ┌─────────┐ ┌──────────┐ │ │
│ │ │ Action │ │ Form │ │ Service │ │ │
│ │ └────────┘ └─────────┘ └──────────┘ │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Capa de Lógica de Negocio │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Crawler │ │ Job │ │ Helper │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Capa de Acceso a Datos │
│ ┌──────────────────────────────────────────┐ │
│ │ DBFlute / OpenSearch │ │
│ │ ┌────────┐ ┌─────────┐ ┌──────────┐ │ │
│ │ │Behavior│ │ Entity │ │ Query │ │ │
│ │ └────────┘ └─────────┘ └──────────┘ │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Almacén de Datos │
│ OpenSearch 3.3.0 │
└─────────────────────────────────────────────────┘
Descripción de Capas
Capa de Interfaz de Usuario
Esta es la pantalla que los usuarios operan directamente. Está implementada con JSP, HTML y JavaScript.
Pantalla de búsqueda: Interfaz de búsqueda para usuarios finales
Pantalla de administración: Interfaz de configuración y administración para administradores del sistema
Capa de Aplicación Web
Esta es la capa de aplicación web que usa el framework LastaFlute.
Action: Procesa solicitudes HTTP y llama a lógica de negocio
Form: Recepción de parámetros de solicitud y validación
Service: Implementación de lógica de negocio
Capa de Lógica de Negocio
Esta es la capa que implementa las funciones principales de Fess.
Crawler: Recopila datos de sitios web, sistemas de archivos, etc.
Job: Tareas ejecutadas según programación
Helper: Clases helper usadas en toda la aplicación
Capa de Acceso a Datos
Esta es la capa de acceso a OpenSearch usando DBFlute.
Behavior: Interfaz de operación de datos
Entity: Entidad de datos
Query: Construcción de consultas de búsqueda
Capa de Almacén de Datos
Usa OpenSearch 3.3.0 como motor de búsqueda.
Estructura del Proyecto
Estructura de Directorios
fess/
├── src/
│ ├── main/
│ │ ├── java/org/codelibs/fess/
│ │ │ ├── app/ # Aplicación web
│ │ │ │ ├── web/ # Pantalla de búsqueda
│ │ │ │ │ ├── admin/ # Pantalla de administración
│ │ │ │ │ │ ├── ...Action.java
│ │ │ │ │ │ └── ...Form.java
│ │ │ │ │ └── ...Action.java
│ │ │ │ └── service/ # Capa de servicio
│ │ │ ├── crawler/ # Crawler
│ │ │ │ ├── client/ # Cliente de crawler
│ │ │ │ ├── extractor/ # Extracción de contenido
│ │ │ │ ├── filter/ # Filtros
│ │ │ │ └── transformer/ # Transformación de datos
│ │ │ ├── es/ # Relacionado con OpenSearch
│ │ │ │ ├── client/ # Cliente de OpenSearch
│ │ │ │ ├── query/ # Constructor de consultas
│ │ │ │ └── config/ # Gestión de configuración
│ │ │ ├── helper/ # Clases helper
│ │ │ │ ├── ...Helper.java
│ │ │ ├── job/ # Jobs
│ │ │ │ ├── ...Job.java
│ │ │ ├── util/ # Utilidades
│ │ │ ├── entity/ # Entidades (generadas automáticamente)
│ │ │ ├── mylasta/ # Configuración de LastaFlute
│ │ │ │ ├── action/ # Clase base de Action
│ │ │ │ ├── direction/ # Configuración de aplicación
│ │ │ │ └── mail/ # Configuración de correo
│ │ │ ├── Constants.java # Definición de constantes
│ │ │ └── FessBoot.java # Clase de inicio
│ │ ├── resources/
│ │ │ ├── fess_config.properties # Archivo de configuración
│ │ │ ├── fess_config.xml # Configuración adicional
│ │ │ ├── fess_message_ja.properties # Mensajes (japonés)
│ │ │ ├── fess_message_en.properties # Mensajes (inglés)
│ │ │ ├── log4j2.xml # Configuración de registro
│ │ │ └── ...
│ │ └── webapp/
│ │ ├── WEB-INF/
│ │ │ ├── view/ # Archivos JSP
│ │ │ │ ├── admin/ # JSP de pantalla de administración
│ │ │ │ └── ...
│ │ │ └── web.xml
│ │ ├── css/ # Archivos CSS
│ │ ├── js/ # Archivos JavaScript
│ │ └── images/ # Archivos de imagen
│ └── test/
│ └── java/org/codelibs/fess/
│ ├── ...Test.java # Clases de prueba
│ └── it/ # Pruebas de integración
├── pom.xml # Configuración de Maven
├── dbflute_fess/ # Configuración de DBFlute
│ ├── dfprop/ # Propiedades de DBFlute
│ └── freegen/ # Configuración de FreeGen
└── README.md
Detalles de Paquetes Principales
Paquete app
Este es el código de la capa de aplicación web.
Paquete app.web
Implementa la pantalla de búsqueda y funciones para usuarios finales.
Clases principales:
SearchAction.java: Procesamiento de búsquedaLoginAction.java: Procesamiento de inicio de sesión
Ejemplo:
@Execute
public HtmlResponse index(SearchForm form) {
// Implementación de procesamiento de búsqueda
return asHtml(path_IndexJsp);
}
Paquete app.web.admin
Implementa funciones de la pantalla de administración.
Clases principales:
BwCrawlingConfigAction.java: Configuración de rastreo webBwSchedulerAction.java: Gestión de programadorBwUserAction.java: Gestión de usuarios
Convenciones de nomenclatura:
Prefijo
Bw: Action para administraciónSufijo
Action: Clase ActionSufijo
Form: Clase Form
Paquete app.service
Esta es la capa de servicio que implementa la lógica de negocio.
Clases principales:
SearchService.java: Servicio de búsquedaUserService.java: Servicio de gestión de usuariosScheduledJobService.java: Servicio de gestión de jobs
Ejemplo:
public class SearchService {
public SearchResponse search(SearchRequestParams params) {
// Implementación de lógica de búsqueda
}
}
Paquete crawler
Implementa funcionalidad de recopilación de datos.
Paquete crawler.client
Implementa acceso a diversas fuentes de datos.
Clases principales:
FessClient.java: Clase base de cliente de crawlerWebClient.java: Rastreo de sitios webFileSystemClient.java: Rastreo de sistema de archivosDataStoreClient.java: Rastreo de bases de datos, etc.
Paquete crawler.extractor
Extrae texto de documentos.
Clases principales:
ExtractorFactory.java: Fábrica de extractoresTikaExtractor.java: Extracción usando Apache Tika
Paquete crawler.transformer
Transforma datos rastreados a formato de búsqueda.
Clases principales:
Transformer.java: Interfaz de procesamiento de transformaciónBasicTransformer.java: Procesamiento básico de transformación
Paquete es
Implementa integración con OpenSearch.
Paquete es.client
Esta es la implementación del cliente de OpenSearch.
Clases principales:
FessEsClient.java: Cliente de OpenSearchSearchEngineClient.java: Interfaz de cliente de motor de búsqueda
Paquete es.query
Implementa construcción de consultas de búsqueda.
Clases principales:
QueryHelper.java: Helper de construcción de consultasFunctionScoreQueryBuilder.java: Ajuste de puntuación
Paquete helper
Estas son clases helper usadas en toda la aplicación.
Clases principales:
SystemHelper.java: Helper de todo el sistemaCrawlingConfigHelper.java: Helper de configuración de rastreoSearchLogHelper.java: Helper de registro de búsquedaUserInfoHelper.java: Helper de información de usuarioViewHelper.java: Helper relacionado con vista
Ejemplo:
public class SystemHelper {
public void initializeSystem() {
// Procesamiento de inicialización del sistema
}
}
Paquete job
Implementa jobs ejecutados según programación.
Clases principales:
CrawlJob.java: Job de rastreoSuggestJob.java: Job de sugerenciasScriptExecutorJob.java: Job de ejecución de scripts
Ejemplo:
public class CrawlJob extends LaJob {
@Override
public void run() {
// Implementación de procesamiento de rastreo
}
}
Paquete entity
Estas son clases entity correspondientes a documentos de OpenSearch. Este paquete es generado automáticamente por DBFlute.
Clases principales:
SearchLog.java: Registro de búsquedaClickLog.java: Registro de clicsFavoriteLog.java: Registro de favoritosUser.java: Información de usuarioRole.java: Información de rol
Nota
No edite directamente el código del paquete entity. Se actualiza regenerándolo después de cambiar el esquema.
Paquete mylasta
Realiza configuración y personalización de LastaFlute.
Paquete mylasta.action
Define clases base de Action.
FessUserBean.java: Información de usuarioFessHtmlPath.java: Definición de ruta HTML
Paquete mylasta.direction
Realiza configuración de toda la aplicación.
FessConfig.java: Lectura de configuraciónFessFwAssistantDirector.java: Configuración de framework
Patrones de Diseño y Patrones de Implementación
En Fess, se usan los siguientes patrones de diseño.
Patrón MVC
Está implementado con patrón MVC de LastaFlute.
Model: Service, Entity
View: JSP
Controller: Action
Ejemplo:
// Controller (Action)
public class SearchAction extends FessBaseAction {
@Resource
private SearchService searchService; // Model (Service)
@Execute
public HtmlResponse index(SearchForm form) {
SearchResponse response = searchService.search(form);
return asHtml(path_IndexJsp).renderWith(data -> {
data.register("response", response); // Pasar datos a View (JSP)
});
}
}
Patrón DI
Usa el contenedor DI de LastaFlute.
public class SearchService {
@Resource
private SearchEngineClient searchEngineClient;
@Resource
private UserInfoHelper userInfoHelper;
}
Patrón Factory
Se usa para generar diversos componentes.
public class ExtractorFactory {
public Extractor createExtractor(String mimeType) {
// Generar Extractor según tipo MIME
}
}
Patrón Strategy
Se usa en crawlers y transformers.
public interface Transformer {
Map<String, Object> transform(Map<String, Object> data);
}
public class HtmlTransformer implements Transformer {
// Procesamiento de transformación para HTML
}
Gestión de Configuración
La configuración de Fess se gestiona en múltiples archivos.
fess_config.properties
Define la configuración principal de la aplicación.
# Número de puerto
server.port=8080
# Configuración de conexión a OpenSearch
opensearch.http.url=http://localhost:9201
# Configuración de rastreo
crawler.document.max.size=10000000
fess_config.xml
Esta es configuración adicional en formato XML.
<component name="searchService" class="...SearchService">
<property name="maxSearchResults">1000</property>
</component>
fess_message_*.properties
Estos son archivos de mensajes para soporte multilingüe.
fess_message_ja.properties: Japonésfess_message_en.properties: Inglés
Flujo de Datos
Flujo de Búsqueda
1. Usuario busca en pantalla de búsqueda
↓
2. SearchAction recibe solicitud de búsqueda
↓
3. SearchService ejecuta lógica de negocio
↓
4. SearchEngineClient envía consulta de búsqueda a OpenSearch
↓
5. OpenSearch devuelve resultados de búsqueda
↓
6. SearchService formatea resultados
↓
7. SearchAction pasa resultados a JSP y los muestra
Flujo de Rastreo
1. CrawlJob se ejecuta según programación
↓
2. CrawlingConfigHelper obtiene configuración de rastreo
↓
3. FessClient accede al sitio objetivo
↓
4. Extractor extrae texto del contenido
↓
5. Transformer transforma datos a formato de búsqueda
↓
6. SearchEngineClient registra documento en OpenSearch
Puntos de Extensión
Fess se puede extender en los siguientes puntos.
Agregar Crawler Personalizado
Puede soportar fuentes de datos propias heredando FessClient.
Agregar Transformer Personalizado
Puede agregar procesamiento de transformación de datos propio implementando Transformer.
Agregar Extractor Personalizado
Puede agregar procesamiento de extracción de contenido propio implementando Extractor.
Agregar Plugin Personalizado
Puede crear plugins propios implementando la interfaz Plugin.
Materiales de Referencia
Frameworks
Documentación Técnica
Próximos Pasos
Una vez que comprenda la arquitectura, consulte los siguientes documentos:
Flujo de Trabajo de Desarrollo - Flujo de desarrollo real
Construcción y Pruebas - Construcción y pruebas
Guía de Contribución - Crear pull requests