Zend Lucene….

Une longue histoire, des tas, d’essais, moults insultes, tentatives vaines, bref, quand vous avez une bibliothèque électronique avec epubs et ou pdfs, voire, avec des excel, des doc,/docx, odt…

Comment répertorier ce bordel ?

Là, intervient la notion de moteur de recherche interne…

Y a sharepoint, de microsoft, c’est payant, trois mois d’essais gratos, 3gB à télécharger…

Lucene….voir les article en interne…

Ouais, faut toucher à java, ça ue disent certains, bah! Un coup d’Eclipse, et le debug est plus facile…

Bref, …

Interopération avec Java Lucene

29.8.1. Formats de fichier

les fichiers d’index Zend_Search_Lucene sont compatible binairement avec une Lucene 1.4 et supérieur.

Une description détaillée de ce format est disponible ici : http://lucene.apache.org/java/docs/fileformats.html.

29.8.2. Répertoire d’index

Après la création de l’index, le dossier index contiendra plusieurs fichiers :

  • Le fichier segments est une liste des segments d’index.
  • Les fichiers *.cfs contiennent les segments d’index. Note! Les index optimisés n’ont toujours qu’un seul segment.
  • Le fichier deletable est une liste des fichiers qui ne sont plus utilisés par l’index, mais qui ne peuvent pas être supprimés.

29.8.3. Code source Java

Le code Java ci dessous fournis un exemple de comment indexer un fichier en utilisant Java Lucene:

/**
* Création d'un index :
*/
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.document.*;
import java.io.*
...
IndexWriter indexWriter = new IndexWriter("/donnees/mon_index",
                                          new SimpleAnalyzer(), true);
...
String filename = "/path/to/file-to-index.txt"
File f = new File(filename);
Document doc = new Document();
doc.add(Field.Text("path", filename));
doc.add(Field.Keyword("modified",DateField.timeToString(f.lastModified())));
doc.add(Field.Text("author", "unknown"));
FileInputStream is = new FileInputStream(f);
Reader reader = new BufferedReader(new InputStreamReader(is));
doc.add(Field.Text("contents", reader));
indexWriter.addDocument(doc);
        

29.8.4. Utiliser LuceneIndexCreation.jar

Pour démarrer rapidement avec Zend_Search_Lucene, un fichier JAR (Java) a été crée pour générer un index depuis la ligne de commande. Pour plus d’informations sur les fichiers JAR, visitez: http://java.sun.com/docs/books/tutorial/jar/basics/index.html.

LuceneIndexCreation.jar lit les fichier texte et construit un index à partir d’eux. Utilisation:

java -jar LuceneIndexCreation.jar [-c] [-s] <document_dir> <index_dir>
-c   - force l'index à sensible à être sensible àla case
-s   - stocke le contenu dans l'index
    	

Cette commande analyse le répertoire <document_dir>, ainsi que tous ces sous répertoires, et génère un index Lucene. L’index est un jeu de fichiers qui seront stokés dans un répertoire séparé <index_dir>.

Pour chaque document à indexer, LuceneIndexCreation crée un objet document avec trois champs: un champ contents qui contient le contenu (corps) du document, un champs modified qui contient la date de la dernière modification et le chemin complet ainsi que le nom du fichier dans le champ path.

Si -c est specifié, alors l’index est sensible à la case. Sinon tous les termes sont convertit en miniscule avant d’être ajouté à l’index.

Si -s est specifié, alors le contenu du document est stocké dans l’index et peut-être récupéré avec les champs path et modified.

Sinon seul les champs path et modified sont stockés, et seul le champ contents est indexé. Dans ce cas le contenu du document peut-être récupéré dans sa source original en utlisant son path.

Soyez prudent, utiliser l’option -s augmente la taille de l’index de presque 5 fois.