Admin searches : trier par visiteurs uniques plutôt que par hits #56
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problème
L'onglet
/admin/searchestrie les termes recherchés par nombre d'occurrences brutes (hits). Si le même visiteur tape le même terme 10 fois, ça compte 10. La colonne affiche d'ailleurs « Fois ».Le tri par visiteurs uniques (IPs distinctes) est plus représentatif de l'intérêt réel pour un terme.
Analyse technique
Format des logs Apache
L'IP est le premier champ avant le premier espace — facilement extractible.
Code actuel (
src/SearchLogParser.php)La méthode
parseLine()(ligne 109) incrémente un compteur brut :La signature de
topTerms()retournearray<string,int>(terme → count), inchangée.Format du cache
Le cache JSON (
_cache/search_terms.json) stocke{"terme": count}. Le format reste identique — seule la sémantique decountchange (visiteurs uniques au lieu de hits).Note : le cache doit être invalidé/supprimé manuellement après le déploiement pour recalculer avec la nouvelle logique.
Implémentation
1.
src/SearchLogParser.php—parseLine()Changer la signature du tableau accumulateur de
&$countsà&$visitorset extraire l'IP :2.
src/SearchLogParser.php—topTerms()etparseFile()Après le parsing, convertir le set d'IPs en comptage :
parseFile()doit passer$visitorsau lieu de$counts— renommer le paramètre&$countsen&$visitors.3.
templates/admin.php— colonneDans l'onglet searches (autour de la ligne avec
<th>Fois</th>) :4. Invalidation du cache
Après déploiement, supprimer le cache existant :
Ou ajouter un bouton admin « Vider le cache » (à faire dans un ticket séparé si besoin).
Considérations
Mémoire : en parcourant 14 jours de logs, le tableau
$visitorspeut contenir beaucoup d'IPs uniques par terme. En pratique, sur un blog personnel, ça reste négligeable (< 1 Mo en mémoire).Vie privée : les IPs ne sont jamais persistées — elles servent uniquement à la déduplication en mémoire pendant le calcul. Le cache JSON ne stocke que des entiers.
Même terme, même visiteur, jours différents : les IPs ne sont pas dédupliquées par jour, mais globalement sur les 14 jours. C'est acceptable pour un blog personnel.
Fichiers concernés
src/SearchLogParser.php—parseLine(),parseFile(),topTerms()(logique centrale)templates/admin.php— en-tête de colonne « Fois » → « Visiteurs »Ticket migré vers le dépôt Folio : cedricAbonnel/folio#41