Apercu
Le connecteur CSV fournit la fonctionnalite permettant de recuperer des donnees a partir de fichiers CSV et de les enregistrer dans l’index Fess.
Cette fonctionnalite necessite le plugin fess-ds-csv.
Prerequis
L’installation du plugin est requise
L’acces au fichier CSV est necessaire
L’encodage des caracteres du fichier CSV doit etre connu
Installation du plugin
Methode 1 : Placement direct du fichier JAR
# Telecharger depuis Maven Central
wget https://repo1.maven.org/maven2/org/codelibs/fess/fess-ds-csv/X.X.X/fess-ds-csv-X.X.X.jar
# Placement
cp fess-ds-csv-X.X.X.jar $FESS_HOME/app/WEB-INF/lib/
# ou
cp fess-ds-csv-X.X.X.jar /usr/share/fess/app/WEB-INF/lib/
Methode 2 : Installation depuis l’interface d’administration
Ouvrir « Systeme » -> « Plugins »
Telecharger le fichier JAR
Redemarrer Fess
Configuration
Configurez depuis l’interface d’administration via « Crawler » -> « Data Store » -> « Nouveau ».
Configuration de base
| Element | Exemple |
|---|---|
| Nom | Products CSV |
| Nom du gestionnaire | CsvDataStore |
| Active | Oui |
Configuration des parametres
Fichier local :
file_path=/path/to/data.csv
encoding=UTF-8
has_header=true
separator=,
quote="
Fichier HTTP :
file_path=https://example.com/data/products.csv
encoding=UTF-8
has_header=true
separator=,
quote="
Fichiers multiples :
file_path=/path/to/data1.csv,/path/to/data2.csv,https://example.com/data3.csv
encoding=UTF-8
has_header=true
separator=,
quote="
Liste des parametres
| Parametre | Requis | Description |
|---|---|---|
file_path | Oui | Chemin du fichier CSV (local, HTTP, plusieurs fichiers separes par des virgules) |
encoding | Non | Encodage des caracteres (par defaut : UTF-8) |
has_header | Non | Presence d’une ligne d’en-tete (par defaut : true) |
separator | Non | Caractere de separation (par defaut : virgule ,) |
quote | Non | Caractere de citation (par defaut : guillemet double ") |
Configuration du script
Avec en-tete :
url="https://example.com/product/" + data.product_id
title=data.product_name
content=data.description
digest=data.category
price=data.price
Sans en-tete (index de colonne) :
url="https://example.com/product/" + data.col0
title=data.col1
content=data.col2
price=data.col3
Champs disponibles
data.<nom_colonne>- Nom de colonne de la ligne d’en-tete (si has_header=true)data.col<N>- Index de colonne (si has_header=false, commence a 0)
Details du format CSV
CSV standard (conforme RFC 4180)
product_id,product_name,description,price,category
1,Laptop,High-performance laptop,150000,Electronics
2,Mouse,Wireless mouse,3000,Electronics
3,"Book, Programming","Learn to code",2800,Books
Modification du separateur
Tabulation (TSV) :
# Parametre
separator=\t
Point-virgule :
# Parametre
separator=;
Caractere de citation personnalise
Guillemet simple :
# Parametre
quote='
Encodage
Fichier japonais (Shift_JIS) :
encoding=Shift_JIS
Fichier japonais (EUC-JP) :
encoding=EUC-JP
Exemples d’utilisation
Catalogue de produits CSV
Fichier CSV (products.csv) :
product_id,name,description,price,category,in_stock
1001,Laptop,High-performance laptop,120000,Computer,true
1002,Mouse,Wireless mouse,2500,Peripherals,true
1003,Keyboard,Mechanical keyboard,8500,Peripherals,false
Parametres :
file_path=/var/data/products.csv
encoding=UTF-8
has_header=true
separator=,
quote="
Script :
url="https://shop.example.com/product/" + data.product_id
title=data.name
content=data.description + " Categorie: " + data.category + " Prix: " + data.price + " EUR"
digest=data.category
price=data.price
Filtrage des informations de stock :
if (data.in_stock == "true") {
url="https://shop.example.com/product/" + data.product_id
title=data.name
content=data.description
price=data.price
}
Annuaire des employes CSV
Fichier CSV (employees.csv) :
emp_id,name,department,email,phone,position
E001,Jean Dupont,Ventes,dupont@example.com,01-23-45-67-89,Directeur
E002,Marie Martin,Developpement,martin@example.com,01-34-56-78-90,Manager
E003,Pierre Durand,Administration,durand@example.com,01-45-67-89-01,Responsable
Parametres :
file_path=/var/data/employees.csv
encoding=UTF-8
has_header=true
separator=,
quote="
Script :
url="https://intranet.example.com/employee/" + data.emp_id
title=data.name + " (" + data.department + ")"
content="Departement: " + data.department + "\nPoste: " + data.position + "\nEmail: " + data.email + "\nTelephone: " + data.phone
digest=data.department
CSV sans en-tete
Fichier CSV (data.csv) :
1,Produit A,Ceci est le produit A,1000
2,Produit B,Ceci est le produit B,2000
3,Produit C,Ceci est le produit C,3000
Parametres :
file_path=/var/data/data.csv
encoding=UTF-8
has_header=false
separator=,
quote="
Script :
url="https://example.com/item/" + data.col0
title=data.col1
content=data.col2
price=data.col3
Integration de plusieurs fichiers CSV
Parametres :
file_path=/var/data/2024-01.csv,/var/data/2024-02.csv,/var/data/2024-03.csv
encoding=UTF-8
has_header=true
separator=,
quote="
Script :
url="https://example.com/report/" + data.id
title=data.title
content=data.content
timestamp=data.date
Recuperation de CSV depuis HTTP
Parametres :
file_path=https://example.com/data/products.csv
encoding=UTF-8
has_header=true
separator=,
quote="
Script :
url="https://example.com/product/" + data.id
title=data.name
content=data.description
Fichier separe par tabulation (TSV)
Fichier TSV (data.tsv) :
id title content category
1 Article1 Contenu de l'article 1 Actualites
2 Article2 Contenu de l'article 2 Blog
Parametres :
file_path=/var/data/data.tsv
encoding=UTF-8
has_header=true
separator=\t
quote="
Script :
url="https://example.com/article/" + data.id
title=data.title
content=data.content
digest=data.category
Depannage
Fichier introuvable
Symptome : FileNotFoundException ou No such file
Points a verifier :
Verifier si le chemin du fichier est correct (chemin absolu recommande)
Verifier si le fichier existe
Verifier si les droits de lecture sont accordes
Verifier si l’utilisateur executant Fess peut y acceder
Caracteres illisibles
Symptome : Les caracteres speciaux ne s’affichent pas correctement
Solution :
Specifier le bon encodage :
# UTF-8
encoding=UTF-8
# Windows (CP1252)
encoding=Windows-1252
# ISO-8859-1
encoding=ISO-8859-1
Verifier l’encodage du fichier :
file -i data.csv
Les colonnes ne sont pas reconnues correctement
Symptome : Les delimiteurs de colonnes ne sont pas reconnus correctement
Points a verifier :
Verifier si le caractere de separation est correct :
# Virgule separator=, # Tabulation separator=\t # Point-virgule separator=;
Verifier le parametre de citation
Verifier le format du fichier CSV (conformite RFC 4180)
Gestion de la ligne d’en-tete
Symptome : La premiere ligne est reconnue comme donnees
Solution :
Si une ligne d’en-tete existe :
has_header=true
Si aucune ligne d’en-tete n’existe :
has_header=false
Impossible de recuperer les donnees
Symptome : Le crawl reussit mais le nombre d’elements est 0
Points a verifier :
Verifier si le fichier CSV n’est pas vide
Verifier si la configuration du script est correcte
Verifier si les noms de colonnes sont corrects (si has_header=true)
Verifier les messages d’erreur dans les logs
Fichiers CSV volumineux
Symptome : Memoire insuffisante ou timeout
Solution :
Diviser le fichier CSV en plusieurs parties
Utiliser uniquement les colonnes necessaires dans le script
Augmenter la taille du tas de Fess
Filtrer les lignes inutiles
Champs contenant des sauts de ligne
Le format RFC 4180 permet de gerer les champs contenant des sauts de ligne en les entourant de guillemets :
id,title,description
1,"Product A","This is
a multi-line
description"
2,"Product B","Single line"
Parametres :
file_path=/var/data/data.csv
encoding=UTF-8
has_header=true
separator=,
quote="
Exemples d’utilisation avancee des scripts
Traitement des donnees
url="https://example.com/product/" + data.id
title=data.name
content=data.description
price=parseInt(data.price)
category=data.category.toLowerCase()
Indexation conditionnelle
# Uniquement les produits dont le prix est superieur ou egal a 10000
if (parseInt(data.price) >= 10000) {
url="https://example.com/product/" + data.id
title=data.name
content=data.description
price=data.price
}
Concatenation de plusieurs colonnes
url="https://example.com/product/" + data.id
title=data.name
content=data.description + "\n\nSpecifications:\n" + data.specs + "\n\nRemarques:\n" + data.notes
category=data.category
Format de date
url="https://example.com/article/" + data.id
title=data.title
content=data.content
created=data.created_date
# Si une conversion de format de date est necessaire, un traitement supplementaire est requis
Informations de reference
Apercu des connecteurs DataStore - Apercu des connecteurs Data Store
Connecteur JSON - Connecteur JSON
Connecteur base de donnees - Connecteur de base de donnees
Présentation - Guide de configuration Data Store