Programmer's Reference Guide
| Vue d'ensemble |
Créer des indexes
Créer un nouvel index
La création et la mise à jour d'index est disponible dans le module ZSearch et dans Java Lucene. Vous pouvez utilisez les capacités des deux.
Le listing de code PHP ci-dessous propose un exemple montrant comment indexer un fichier en utilisant l'API d'indexation de Zend_Search_Lucene :
<?php
// Définir le second paramètre à true pour créer un nouvel index
$index = new Zend_Search_Lucene('/donnees/mon-index', true);
$doc = new Zend_Search_Lucene_Document();
// Stocke l'URL du document pour l'identifier dans un résultat de recherche.
$doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
// Contenu du document d'index
$doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $docContent));
// Ajout du document à l'index
$index->addDocument($doc);
// Ecriture des changements dans l'index
$index->commit();
Les nouveaux documents ajoutés peuvent être récupérés depuis l'index après une opération de commit.
Zend_Search_Lucene::commit() est automatiquement appelé à la fin de l'éxecution du
script et avant toute recherche.
Chaque appel à commit() génère un nouveau segment d'index.
[1]
» http://lucene.apache.org/java/docs/fileformats.html
Il doit être fait aussi rarement que possible.
De plus, commiter une grande quantité de documents en une seule fois consomme plus de mémoire.
L'optimisation automatique de la gestion des segment est un sujet d'amélioration future pour Zend_Search_Lucene.
Mettre à jour l'index
Le même procédure est utilisée pour mettre à jour un index existant. La seule différence est que l'index doit être ouvert sans second paramètre :
<?php
// Ouverture d'un index existant
$index = new Zend_Search_Lucene('/donnees/mon-index');
$doc = new Zend_Search_Lucene_Document();
// Stocke l'URL du document pour l'identifier dans un résultat de recherche.
$doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
// Contenu du document d'index
$doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $docContent));
// Ajout du document à l'index
$index->addDocument($doc);
// Ecriture des changements dans l'index
$index->commit();
Chaque appel à commit() (explicite ou implicite) génère un nouveau segment d'index.
Zend_Search_Lucene ne gère pas les segments automatiquement. C'est pourquoi vous devriez être attentif à la taille du segment. D'un côté, un seul gros segment est plus efficace, mais d'un autre côté, cela nécessite plus de mémoire lors de la création.
Lucene Java et Luke (Lucene Index Toolbox - » http://www.getopt.org/luke/) peuvent être utilisés pour optimiser l'index avec cette version de Zend_Search_Lucene.
Mise à jour de documents
Le format de fichier d'index ne supporte pas la mise à jour de document. Le document doit être effacé et ajouté de nouveau.
La méthode Zend_Search_Lucene::delete() opère avec un id de document index interne.
Il peut être récupéré par une requête sur la propriété 'id' :
<?php
$removePath = ...;
$hits = $index->find('path:' . $removePath);
foreach ($hits as $hit) {
$index->delete($hit->id);
}
$index->commit();
| Vue d'ensemble |
