-
Bug
-
Résolution: Résolu
-
Mineur
-
6.02.26
-
Aucune
Pour reproduire :
- Modifier une fiche pour y ajouter un texte bien spécifique (exemple : testkosmostestkosmos) et mettre une date de mise en ligne dans le futur.
- Enregistrer
- Lancer l'indexation (pas firstIndex)
- Rechercher en front le texte saisi.
-> Pas de retour (normal), mais erreur dans les logs :2016-06-07_14:11:43.096 [http-bio-8080-exec-10] ERROR com.jsbsoft.jtf.textsearch.Searcher - erreur sur l'indexer java.lang.NullPointerException: null at org.apache.lucene.util.ReaderUtil.gatherSubReaders(ReaderUtil.java:46) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.search.IndexSearcher.gatherSubReaders(IndexSearcher.java:210) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.search.IndexSearcher.<init>(IndexSearcher.java:190) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at org.apache.lucene.search.IndexSearcher.<init>(IndexSearcher.java:115) ~[lucene-core-3.6.2.jar:3.6.2 1423725 - rmuir - 2012-12-18 19:45:40] at com.jsbsoft.jtf.textsearch.Searcher.reOpen(Searcher.java:165) [core-6.02.26.jar:na] at com.jsbsoft.jtf.textsearch.Searcher.testReader(Searcher.java:150) [core-6.02.26.jar:na] at com.jsbsoft.jtf.textsearch.Searcher.getSearcher(Searcher.java:217) [core-6.02.26.jar:na] at com.univ.utils.RechercheUtil.traiterRecherche(RechercheUtil.java:101) [core-6.02.26.jar:na] at com.univ.utils.RechercheFiche.search(RechercheFiche.java:260) [core-6.02.26.jar:na] at com.univ.utils.RechercheFiche.traiterRECHERCHE(RechercheFiche.java:201) [core-6.02.26.jar:na] at com.univ.utils.RechercheFiche.traiterAction(RechercheFiche.java:165) [core-6.02.26.jar:na]
En revanche, le problème apparaît seulement à la première recherche qui suit l'indexation.
Le problème pourrait se situer dans la fonction Searcher.reOpen ci-dessous :
private synchronized void reOpen() { if (needToReOpen) { try { final IndexReader newReader = IndexReader.openIfChanged(indexReader); if (newReader != indexReader) { closeAll(); } indexReader = newReader; indexSearcher = new IndexSearcher(indexReader); } catch (final Exception e) { LOG.error("erreur sur l'indexer", e); } needToReOpen = false; } }
Le booléen needToReOpen est à true alors que l'indexReader est toujours ouvert. Du coup on essaye d'en ouvrir un autre, mais lucene dit non car l'actuel est toujours ouvert. On a donc un newReader à null et un "oldReader" qu'on ferme.