Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Sur le site d'un client nous avons mis en place Zend_Search_Lucene. Les contenus à indexer représentent actuellement 1500 enregistrements (de nouvelles entrées sont ajoutées chaque semaine).
Le batch qui gère l'index Lucene a cette tête là ;
function sanitize($input) { return utf8_decode( $input ) ; //return htmlentities( $input ); } $index = new Zend_Search_Lucene(PATH_VAR . 'lucene/siteIndex', true); //get all indexable contents id DB $searchableContents = SiteTree::fetchSearchableSiteTreeEntries(); $counter = 0; //parsing results of query foreach ($searchableContents as $content) { if ($counter == 50) { $index->commit(); $index = new Zend_Search_Lucene(PATH_VAR . 'lucene/siteIndex', true); $counter = 0; } if ( Lang::getLocaleById( $content->languageId ) != 'ar' ) { $doc = new Zend_Search_Lucene_Document(); $doc->addField(Zend_Search_Lucene_Field::Text('title', sanitize($content->htmlTitle))); $doc->addField(Zend_Search_Lucene_Field::Text('intro', sanitize($content->htmlIntro))); $doc->addField(Zend_Search_Lucene_Field::Text('tags', sanitize($content->tags))); $doc->addField(Zend_Search_Lucene_Field::Text('language', Lang::getLocaleById( $content->languageId ))); $doc->addField(Zend_Search_Lucene_Field::Text('keywords', sanitize($content->metaKey))); $doc->addField(Zend_Search_Lucene_Field::UnIndexed('siteTreeId',$content->id)); $doc->addField(Zend_Search_Lucene_Field::Unstored('content', sanitize($content->htmlContent))); } $counter ++; } $index->commit(); $index->optimize();
Tous les 50 documents, je réinitialise l'objet Zend_Search_Lucene. mais j'ai toujours ce souci de mémoire au bout d'un moment :
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 81 bytes) in /home/website/web/www/library/Zend/Search/Lucene/Analysis/TokenFilter/LowerCase.php on line 47
Des idées ?
D'avance merci
Hors ligne
j'a eu se problème et pour y remédier j'ai du augmenter la taille limite qu'un script peut utiliser dans le fichier de configuration php.ini dans la section "ressource limits"
Hors ligne
Allowed memory size of 16777216
Ce message veut dire que tu as 16Mo maximum par script. Si tu as une version raisonnablement récente de PHP (5.2 ou plus), la mémoire par défaut est de 128Mo. 16Mo ça me paraît très peu (même pour des pages standard).
Pour faire ton indexation, tu peux ajouter au début de ton script
ini_set("memory_limit","400M");
Ca autorisera ton script à consommer 400Mo pour mener ton indexation. Je te déconseille de le configurer dans ton php.ini, parce que ça voudrait dire que toutes tes pages peuvent consommer cette mémoire, ce qui n'est pas souhaitable (cela dit, ça résoudrait le problème )
A+, Philippe
Hors ligne
Les fois où j'ai eu cette erreur c'est parce que j'ai fait un erreur dans le code de ma recherche ou code SQL ce qui faisait exécuter un script qui en demandait trop souvent du par des résultats répété à l'infini
Hors ligne
Pages: 1