This page explains Fess’s architecture, code structure, and main components. Understanding the internal structure of Fess allows you to develop efficiently.
Overall Architecture
Fess consists of the following main components:
Layer Descriptions
User Interface Layer
The screens that users interact with directly. Implemented using JSP, HTML, and JavaScript.
Search Screen: Search interface for end users
Admin Screen: Configuration and management interface for system administrators
Web Application Layer
Web application layer using the LastaFlute framework.
Action: Processes HTTP requests and calls business logic
Form: Receives request parameters and performs validation
Service: Implements business logic
Business Logic Layer
Layer that implements Fess’s main features.
Crawler: Collects data from websites and file systems
Job: Tasks executed on a schedule
Helper: Helper classes used throughout the application
Data Access Layer
Access layer to OpenSearch using DBFlute.
Behavior: Interface for data operations
Entity: Data entity
Query: Building search queries
Data Store Layer
Uses OpenSearch 3.5.0 as the search engine.
Project Structure
Directory Structure
Main Package Details
app Package
Code for the web application layer.
app.web Package
Implements search screen and end-user features.
Main classes:
SearchAction.java: Search processingLoginAction.java: Login processing
Example:
app.web.admin Package
Implements admin screen features.
Main classes:
AdminWebconfigAction.java: Web crawl configurationAdminSchedulerAction.java: Scheduler managementAdminUserAction.java: User management
Naming conventions:
Adminprefix: Admin ActionActionsuffix: Action classFormsuffix: Form class
app.service Package
Service layer that implements business logic.
Main classes:
SearchLogService.java: Search log serviceUserService.java: User management serviceScheduledJobService.java: Job management service
Example:
crawler Package (fess-crawler library)
Implements data collection features.
Main classes:
CrawlerClient.java: Base class for crawler clientsHcHttpClient.java: HTTP crawling clientFileSystemClient.java: File system crawlingExtractorFactory.java: Extractor factoryTikaExtractor.java: Extraction using Apache TikaTransformer.java: Transformation processing interface
crawler Package (fess main)
Crawler integration in the main Fess application.
Main classes:
FessStandardTransformer.java: Standard transformation processingFessXpathTransformer.java: XPath-based transformation processing
opensearch Package
Implements integration with OpenSearch.
opensearch.client Package
OpenSearch client implementation.
Main classes:
SearchEngineClient.java: OpenSearch client
opensearch.query Package
Implements search query construction.
Main classes:
QueryCommand.java: Query commandQueryProcessor.java: Query processing
helper Package
Helper classes used throughout the application.
Main classes:
SystemHelper.java: System-wide helperCrawlingConfigHelper.java: Crawl configuration helperSearchLogHelper.java: Search log helperUserInfoHelper.java: User information helperViewHelper.java: View-related helperQueryHelper.java: Query construction helper
Example:
job Package
Implements jobs executed on a schedule.
Main classes:
CrawlJob.java: Crawl jobSuggestJob.java: Suggest jobScriptExecutorJob.java: Script execution job
Example:
entity Package
Entity classes corresponding to OpenSearch documents. This package is auto-generated by DBFlute.
Main classes:
SearchLog.java: Search logClickLog.java: Click logFavoriteLog.java: Favorite logUser.java: User informationRole.java: Role information
Note
Do not edit code in the entity package directly as it is auto-generated. Update by changing the schema and regenerating.
mylasta Package
LastaFlute configuration and customization.
mylasta.action Package
Defines Action base classes.
FessUserBean.java: User informationFessHtmlPath.java: HTML path definitions
mylasta.direction Package
Application-wide configuration.
FessConfig.java: Configuration loadingFessFwAssistantDirector.java: Framework configuration
Design Patterns and Implementation Patterns
Fess uses the following design patterns.
MVC Pattern
Implemented using MVC pattern with LastaFlute.
Model: Service, Entity
View: JSP
Controller: Action
Example:
DI Pattern
Uses LastaFlute’s DI container.
Factory Pattern
Used for creating various components.
Strategy Pattern
Used in crawlers and transformers.
Configuration Management
Fess configuration is managed in multiple files.
fess_config.properties
Defines main application configuration.
fess_config.xml
LastaDi component configuration file.
fess_message_*.properties
Message files for internationalization.
fess_message_ja.properties: Japanesefess_message_en.properties: English
Data Flow
Search Flow
Crawl Flow
Extension Points
Fess can be extended at the following points.
Adding Custom Crawlers
Implement the CrawlerClient interface to support custom data sources.
Adding Custom Transformers
Implement Transformer to add custom data transformation processing.
Adding Custom Extractors
Implement Extractor to add custom content extraction processing.
Adding Custom Plugins
Plugins can be managed through the admin UI plugin management screen.
References
Frameworks
Technical Documentation
Next Steps
After understanding the architecture, refer to the following documents:
Development Workflow - Actual development flow
Build and Test - Build and test
Contribution Guide - Creating pull requests