Architecture et structure du code
Cette page explique l’architecture de Fess, la structure du code, et les principaux composants. En comprenant la structure interne de Fess, vous pouvez développer efficacement.
Architecture globale
Fess est composé des principaux composants suivants :
┌─────────────────────────────────────────────────┐
│ Interface utilisateur │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Écran de │ │ Écran │ │
│ │ recherche │ │ d'admin │ │
│ │ (JSP/HTML) │ │ (JSP/HTML) │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Couche application Web │
│ ┌──────────────────────────────────────────┐ │
│ │ LastaFlute │ │
│ │ ┌────────┐ ┌─────────┐ ┌──────────┐ │ │
│ │ │ Action │ │ Form │ │ Service │ │ │
│ │ └────────┘ └─────────┘ └──────────┘ │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Couche logique métier │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Crawler │ │ Job │ │ Helper │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Couche d'accès aux données │
│ ┌──────────────────────────────────────────┐ │
│ │ DBFlute / OpenSearch │ │
│ │ ┌────────┐ ┌─────────┐ ┌──────────┐ │ │
│ │ │Behavior│ │ Entity │ │ Query │ │ │
│ │ └────────┘ └─────────┘ └──────────┘ │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Stockage de données │
│ OpenSearch 3.3.0 │
└─────────────────────────────────────────────────┘
Description des couches
Couche interface utilisateur
C’est l’écran que les utilisateurs manipulent directement. Implémenté en JSP, HTML et JavaScript.
Écran de recherche : Interface de recherche pour les utilisateurs finaux
Écran d’administration : Interface de configuration et de gestion pour les administrateurs système
Couche application Web
Couche d’application Web utilisant le framework LastaFlute.
Action : Traite les requêtes HTTP et appelle la logique métier
Form : Réception et validation des paramètres de requête
Service : Implémentation de la logique métier
Couche logique métier
Couche qui implémente les fonctionnalités principales de Fess.
Crawler : Collecte de données depuis des sites Web et des systèmes de fichiers
Job : Tâches exécutées selon un calendrier
Helper : Classes d’aide utilisées dans toute l’application
Couche d’accès aux données
Couche d’accès à OpenSearch utilisant DBFlute.
Behavior : Interface de manipulation de données
Entity : Entité de données
Query : Construction de requêtes de recherche
Couche stockage de données
Utilise OpenSearch 3.3.0 comme moteur de recherche.
Structure du projet
Structure des répertoires
fess/
├── src/
│ ├── main/
│ │ ├── java/org/codelibs/fess/
│ │ │ ├── app/ # Application Web
│ │ │ │ ├── web/ # Écran de recherche
│ │ │ │ │ ├── admin/ # Écran d'administration
│ │ │ │ │ │ ├── ...Action.java
│ │ │ │ │ │ └── ...Form.java
│ │ │ │ │ └── ...Action.java
│ │ │ │ └── service/ # Couche service
│ │ │ ├── crawler/ # Crawler
│ │ │ │ ├── client/ # Client crawler
│ │ │ │ ├── extractor/ # Extraction de contenu
│ │ │ │ ├── filter/ # Filtres
│ │ │ │ └── transformer/ # Transformation de données
│ │ │ ├── es/ # Relatif à OpenSearch
│ │ │ │ ├── client/ # Client OpenSearch
│ │ │ │ ├── query/ # Constructeur de requêtes
│ │ │ │ └── config/ # Gestion de configuration
│ │ │ ├── helper/ # Classes d'aide
│ │ │ │ ├── ...Helper.java
│ │ │ ├── job/ # Jobs
│ │ │ │ ├── ...Job.java
│ │ │ ├── util/ # Utilitaires
│ │ │ ├── entity/ # Entités (auto-généré)
│ │ │ ├── mylasta/ # Configuration LastaFlute
│ │ │ │ ├── action/ # Classe de base Action
│ │ │ │ ├── direction/ # Configuration application
│ │ │ │ └── mail/ # Configuration mail
│ │ │ ├── Constants.java # Définition de constantes
│ │ │ └── FessBoot.java # Classe de démarrage
│ │ ├── resources/
│ │ │ ├── fess_config.properties # Fichier de configuration
│ │ │ ├── fess_config.xml # Configuration additionnelle
│ │ │ ├── fess_message_ja.properties # Messages (japonais)
│ │ │ ├── fess_message_en.properties # Messages (anglais)
│ │ │ ├── log4j2.xml # Configuration logs
│ │ │ └── ...
│ │ └── webapp/
│ │ ├── WEB-INF/
│ │ │ ├── view/ # Fichiers JSP
│ │ │ │ ├── admin/ # JSP écran d'administration
│ │ │ │ └── ...
│ │ │ └── web.xml
│ │ ├── css/ # Fichiers CSS
│ │ ├── js/ # Fichiers JavaScript
│ │ └── images/ # Fichiers images
│ └── test/
│ └── java/org/codelibs/fess/
│ ├── ...test.java # Classes de test
│ └── it/ # tests d'intégration
├── pom.xml # Configuration Maven
├── dbflute_fess/ # Configuration DBFlute
│ ├── dfprop/ # Propriétés DBFlute
│ └── freegen/ # Configuration FreeGen
└── README.md
Détails des principaux packages
Package app
Code de la couche application Web.
Package app.web
Implémente l’écran de recherche et les fonctionnalités pour les utilisateurs finaux.
Classes principales :
SearchAction.java: Traitement de rechercheLoginAction.java: Traitement de connexion
Exemple :
@Execute
public HtmlResponse index(SearchForm form) {
// Implémentation du traitement de recherche
return asHtml(path_IndexJsp);
}
Package app.web.admin
Implémente les fonctionnalités de l’écran d’administration.
Classes principales :
BwCrawlingConfigAction.java: Configuration du crawl WebBwSchedulerAction.java: Gestion du planificateurBwUserAction.java: Gestion des utilisateurs
Convention de nommage :
Préfixe
Bw: Action pour l’administrationSuffixe
Action: Classe ActionSuffixe
Form: Classe Form
Package app.service
Couche service qui implémente la logique métier.
Classes principales :
SearchService.java: Service de rechercheUserService.java: Service de gestion des utilisateursScheduledJobService.java: Service de gestion des jobs
Exemple :
public class SearchService {
public SearchResponse search(SearchRequestParams params) {
// Implémentation de la logique de recherche
}
}
Package crawler
Implémente la fonctionnalité de collecte de données.
Package crawler.client
Implémente l’accès aux différentes sources de données.
Classes principales :
FessClient.java: Classe de base du client crawlerWebClient.java: Crawl de sites WebFileSystemClient.java: Crawl de systèmes de fichiersDataStoreClient.java: Crawl de bases de données, etc.
Package crawler.extractor
Extrait le texte des documents.
Classes principales :
ExtractorFactory.java: Fabrique d’extracteursTikaExtractor.java: Extraction utilisant Apache Tika
Package crawler.transformer
Transforme les données crawlées en format de recherche.
Classes principales :
Transformer.java: Interface de traitement de transformationBasicTransformer.java: Traitement de transformation de base
Package es
Implémente l’intégration avec OpenSearch.
Package es.client
Implémentation du client OpenSearch.
Classes principales :
FessEsClient.java: Client OpenSearchSearchEngineClient.java: Interface du client de moteur de recherche
Package es.query
Implémente la construction de requêtes de recherche.
Classes principales :
QueryHelper.java: Aide à la construction de requêtesFunctionScoreQueryBuilder.java: Ajustement du score
Package helper
Classes d’aide utilisées dans toute l’application.
Classes principales :
SystemHelper.java: Aide système globaleCrawlingConfigHelper.java: Aide à la configuration du crawlSearchLogHelper.java: Aide aux journaux de rechercheUserInfoHelper.java: Aide aux informations utilisateurViewHelper.java: Aide relative à la vue
Exemple :
public class SystemHelper {
public void initializeSystem() {
// Traitement d'initialisation du système
}
}
Package job
Implémente les jobs exécutés selon un calendrier.
Classes principales :
CrawlJob.java: Job de crawlSuggestJob.java: Job de suggestionScriptExecutorJob.java: Job d’exécution de script
Exemple :
public class CrawlJob extends LaJob {
@Override
public void run() {
// Implémentation du traitement de crawl
}
}
Package entity
Classes d’entités correspondant aux documents OpenSearch. Ce package est auto-généré par DBFlute.
Classes principales :
SearchLog.java: Journal de rechercheClickLog.java: Journal de clicsFavoriteLog.java: Journal de favorisUser.java: Informations utilisateurRole.java: Informations de rôle
Note
Le code du package entity est auto-généré, ne le modifiez pas directement. Mettez à jour en modifiant le schéma et en régénérant.
Package mylasta
Configuration et personnalisation de LastaFlute.
Package mylasta.action
Définit les classes de base Action.
FessUserBean.java: Informations utilisateurFessHtmlPath.java: Définition des chemins HTML
Package mylasta.direction
Configure l’application globale.
FessConfig.java: Chargement de la configurationFessFwAssistantDirector.java: Configuration du framework
Modèles de conception et modèles d’implémentation
Fess utilise les modèles de conception suivants.
Modèle MVC
Implémenté selon le modèle MVC par LastaFlute.
Model : Service, Entity
View : JSP
Controller : Action
Exemple :
// 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); // Passage de données à View (JSP)
});
}
}
Modèle DI
Utilise le conteneur DI de LastaFlute.
public class SearchService {
@Resource
private SearchEngineClient searchEngineClient;
@Resource
private UserInfoHelper userInfoHelper;
}
Modèle Factory
Utilisé pour la génération de divers composants.
public class ExtractorFactory {
public Extractor createExtractor(String mimeType) {
// Génère un Extractor selon le type MIME
}
}
Modèle Strategy
Utilisé dans le crawler et le transformer.
public interface Transformer {
Map<String, Object> transform(Map<String, Object> data);
}
public class HtmlTransformer implements Transformer {
// Traitement de transformation pour HTML
}
Gestion de la configuration
La configuration de Fess est gérée dans plusieurs fichiers.
fess_config.properties
Définit la configuration principale de l’application.
# Numéro de port
server.port=8080
# Configuration de connexion OpenSearch
opensearch.http.url=http://localhost:9201
# Configuration du crawl
crawler.document.max.size=10000000
fess_config.xml
Configuration additionnelle au format XML.
<component name="searchService" class="...SearchService">
<property name="maxSearchResults">1000</property>
</component>
fess_message_*.properties
Fichiers de messages pour le support multilingue.
fess_message_ja.properties: Japonaisfess_message_en.properties: Anglais
Flux de données
Flux de recherche
1. L'utilisateur effectue une recherche sur l'écran de recherche
↓
2. SearchAction reçoit la requête de recherche
↓
3. SearchService exécute la logique métier
↓
4. SearchEngineClient envoie une requête de recherche à OpenSearch
↓
5. OpenSearch retourne les résultats de recherche
↓
6. SearchService formate les résultats
↓
7. SearchAction passe les résultats à JSP pour l'affichage
Flux de crawl
1. CrawlJob est exécuté selon le calendrier
↓
2. CrawlingConfigHelper obtient la configuration du crawl
↓
3. FessClient accède au site cible
↓
4. Extractor extrait le texte du contenu
↓
5. Transformer transforme les données en format de recherche
↓
6. SearchEngineClient enregistre les documents dans OpenSearch
Points d’extension
Fess peut être étendu aux points suivants.
Ajout d’un crawler personnalisé
Vous pouvez prendre en charge vos propres sources de données en héritant de FessClient.
Ajout d’un transformer personnalisé
Vous pouvez ajouter votre propre traitement de transformation de données en implémentant Transformer.
Ajout d’un extracteur personnalisé
Vous pouvez ajouter votre propre traitement d’extraction de contenu en implémentant Extractor.
Ajout d’un plugin personnalisé
Vous pouvez créer vos propres plugins en implémentant l’interface Plugin.
Ressources de référence
Frameworks
Documentation technique
Étapes suivantes
Après avoir compris l’architecture, consultez la documentation suivante :
Flux de travail de développement - Flux de développement réel
Compilation et tests - Compilation et tests
Guide de contribution - Création de pull requests