Apercu
Le connecteur de base de donnees fournit une fonctionnalite pour recuperer des donnees depuis des bases de donnees relationnelles compatibles JDBC et les enregistrer dans l’index de Fess.
Cette fonctionnalite est integree a Fess et ne necessite pas de plugin supplementaire.
Bases de donnees prises en charge
Toutes les bases de donnees compatibles JDBC sont prises en charge. Exemples principaux :
MySQL / MariaDB
PostgreSQL
Oracle Database
Microsoft SQL Server
SQLite
H2 Database
Prerequis
Un pilote JDBC est necessaire
Un acces en lecture a la base de donnees est requis
Pour les grands volumes de donnees, une conception de requete appropriee est importante
Installation du pilote JDBC
Placez le pilote JDBC dans le repertoire lib/ :
# Exemple : pilote MySQL
cp mysql-connector-java-8.0.33.jar /path/to/fess/lib/
Redemarrez Fess pour charger le pilote.
Methode de configuration
Configurez depuis l’interface d’administration : « Crawler » -> « DataStore » -> « Nouveau ».
Configuration de base
| Element | Exemple de configuration |
|---|---|
| Nom | Products Database |
| Nom du handler | DatabaseDataStore |
| Actif | Oui |
Configuration des parametres
Exemple MySQL/MariaDB :
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
username=fess_user
password=your_password
sql=SELECT id, title, content, url, updated_at FROM articles WHERE deleted = 0
Exemple PostgreSQL :
driver=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/mydb
username=fess_user
password=your_password
sql=SELECT id, title, content, url, updated_at FROM articles WHERE deleted = false
Liste des parametres
| Parametre | Requis | Description |
|---|---|---|
driver | Oui | Nom de classe du pilote JDBC |
url | Oui | URL de connexion JDBC |
username | Oui | Nom d’utilisateur de la base de donnees |
password | Oui | Mot de passe de la base de donnees |
sql | Oui | Requete SQL pour la recuperation des donnees |
fetch.size | Non | Taille de fetch (defaut : 100) |
Configuration du script
Mappez les noms de colonnes SQL vers les champs d’index :
url="https://example.com/articles/" + data.id
title=data.title
content=data.content
lastModified=data.updated_at
Champs disponibles :
data.<column_name>- Colonnes du resultat de la requete SQL
Conception des requetes SQL
Requetes efficaces
Pour les grands volumes de donnees, les performances de requete sont importantes :
# Requete efficace utilisant un index
SELECT id, title, content, url, updated_at
FROM articles
WHERE updated_at >= :last_crawl_date
ORDER BY id
Exploration incrementale
Methode pour recuperer uniquement les enregistrements mis a jour :
# Filtrage par date de mise a jour
sql=SELECT * FROM articles WHERE updated_at >= '2024-01-01 00:00:00'
# Specification de plage par ID
sql=SELECT * FROM articles WHERE id > 10000
Generation d’URL
L’URL du document est generee par le script :
# Motif fixe
url="https://example.com/article/" + data.id
# Combinaison de plusieurs champs
url="https://example.com/" + data.category + "/" + data.slug
# Utilisation de l'URL stockee dans la base de donnees
url=data.url
Prise en charge des caracteres multi-octets
Pour traiter des donnees contenant des caracteres multi-octets comme le francais :
MySQL
url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8
PostgreSQL
PostgreSQL utilise generalement UTF-8 par defaut. Si necessaire :
url=jdbc:postgresql://localhost:5432/mydb?charSet=UTF-8
Pooling de connexions
Pour le traitement de grands volumes de donnees, envisagez le pooling de connexions :
# Configuration avec HikariCP
datasource.class=com.zaxxer.hikari.HikariDataSource
pool.size=5
Securite
Protection des identifiants de base de donnees
Avertissement
Ecrire les mots de passe directement dans les fichiers de configuration presente un risque de securite.
Methodes recommandees :
Utiliser des variables d’environnement
Utiliser la fonctionnalite de chiffrement de Fess
Utiliser un utilisateur en lecture seule
Principe du moindre privilege
Accordez uniquement les privileges minimum necessaires a l’utilisateur de la base de donnees :
-- Exemple MySQL
CREATE USER 'fess_user'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT ON mydb.articles TO 'fess_user'@'localhost';
Exemples d’utilisation
Recherche de catalogue de produits
Parametres :
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/shop
username=fess_user
password=password
sql=SELECT p.id, p.name, p.description, p.price, c.name as category, p.updated_at FROM products p JOIN categories c ON p.category_id = c.id WHERE p.active = 1
Script :
url="https://shop.example.com/product/" + data.id
title=data.name
content=data.description + " Categorie: " + data.category + " Prix: " + data.price + " EUR"
lastModified=data.updated_at
Articles de base de connaissances
Parametres :
driver=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/knowledge
username=fess_user
password=password
sql=SELECT id, title, body, tags, author, created_at, updated_at FROM articles WHERE published = true ORDER BY id
Script :
url="https://kb.example.com/article/" + data.id
title=data.title
content=data.body
digest=data.tags
author=data.author
created=data.created_at
lastModified=data.updated_at
Depannage
Pilote JDBC introuvable
Symptome : ClassNotFoundException ou No suitable driver
Solution :
Verifiez que le pilote JDBC est place dans
lib/Verifiez que le nom de classe du pilote est correct
Redemarrez Fess
Erreur de connexion
Symptome : Connection refused ou erreur d’authentification
Points a verifier :
La base de donnees est-elle demarree ?
Le nom d’hote et le numero de port sont-ils corrects ?
Le nom d’utilisateur et le mot de passe sont-ils corrects ?
Configuration du pare-feu
Erreur de requete
Symptome : SQLException ou erreur de syntaxe SQL
Points a verifier :
Testez la requete SQL directement sur la base de donnees
Verifiez que les noms de colonnes sont corrects
Verifiez que les noms de tables sont corrects
Informations de reference
Apercu des connecteurs DataStore - Apercu des connecteurs DataStore
Connecteur CSV - Connecteur CSV
Connecteur JSON - Connecteur JSON
Présentation - Guide de configuration DataStore