Résoudre l’erreur « Index is under processing » avec Symony 1.4 et Lucene

  • Tweet

Cette année j’ai bossé à plusieurs reprises sur un projet assez exotique. Je dis exotique car je n’ai fait que reprendre le projet, dont le codage est dans l’ensemble dégueulasse « spécial ».

Pour son module de recherche, le site (développé en Symfony 1.4), utilise le moteur Lucene issu du Zend Framework, fidèlement au tuto officiel Jobeet.

Par contre je ne sais pas comment exactement les développeurs se sont débrouillés, mais en 3 mois j’ai eu deux fois la même erreur lorsqu’on essaye de faire une recherche sur le site, c’est à dire qu’on tombe sur une page d’erreur Symfony avec le doux message

Index is under processing

Pour être franc, je ne sais pas si c’est la faute des développeurs ou du serveur, qui est configuré aussi bizarrement au niveau des droits, alors peut-être les fichiers généres « .lock.file » par le moteur de recherche Lucene ne peuvent pas être supprimés comme il le faudrai… En tout cas si vous tombez sur la même erreur, je vous donne l’astuce, car après des heures et des heures de recherche je n’ai trouvé la solution sur aucun site, blog ni aucun forum. Du coup obligé de réfléchir pour en trouver une, zut !

En gros, le moteur indexe chaque modèle (spécifié manuellement auparavant) de données dans un dossier portant le nom du modèle, dans le dossier (racine du site)/data/lucene_index. Par exemple, si vous avez configuré le moteur pour indexer les articles, les vidéos et les utilisateurs de votre site, vous aurez trois dossiers:

Et donc les fichiers d’indexation seront présents dans chaque dossier. Je ne sais pas pourquoi mais à certains moments le moteur crée des fichiers .lock.file dans chaque dossier, c’est à ce moment qu’à lieu le « Index is under processing« .

Au début je pensais qu’il suffisait de supprimer ces fichiers, mais ça ne semble pas suffire. De plus, il faudrait les supprimer dans chaque dossier alors qu’en fait ce n’est pas obligatoirement tous les fichiers de chaque dossier qui mettent le bazar.

La solution

Le problème se résout en deux étapes:

  1. Il faut détecter quel index de quel modèle bloque l’indexation. Pour ce faire, vous devrez pour chaque modèle, taper:

    php symfony lucene:update-index NomDuModèle

    Donc si vous avez 5 modèles, vous lancez la commande 5 fois en remplaçant NomDuModèle par Article, Video, User, etc…
    En fait, cette commande met à jour les index manuellement, et au moment ou vous lancerez cette commande pour le modèle qui pose problème, vous aurez dans la console le même message d’erreur (Index is under processing now).

  2. Maintenant que vous avez repéré le modèle qui pose problème, allez dans son dossier (par exemple data/lucene_index/article et supprimez tout ce qu’il y a à l’intérieur

Le problème devrait être résolu. Cela dit attention, c’est une solution palliative, sachant que supprimer tout le contenu du dossier supprimera les données d’indexage de ce modèle (autrement dit, il faudra que le contenu soit réouvert une fois pour être automatiquement indexé, afin qu’il apparaisse dans les résultats de recherche). Mais déjà ça évite de bloquer toute recherche, car la recherche sur les autres modèles fonctionneront normalement.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut