Apache Solr
Indexation
Principe
Solr maintient dans son index une collection de documents. Un document est un ensemble de champs (fields) auxquels sont associées des valeurs.
Solr permet d'indexer par défaut les fichiers XML et CSV, mais il y a possibilité d'indexer des données à partie de "Rich Documents" tels que PDF, PPT, DOC ou encore XLS, grâce à un handler spécifique.
Solr offre la possibilité d'importer des données depuis une base de données, ou même un flux RSS. Pour la base de données, les colonnes d'une table deviendront les champs du Document manipulé.
Document à indexer
Pour indexer des documents, il faut tout d'abord les formater au format XML (ou CSV). Dans l'exemple ci-dessus,
on considère le fichier "superheroes.xml", comportant un seul superhéro, Spider-Man :
<add><doc> <field name=“id”>0001</field> <field name=“name”>Peter Parker</field> <field name=“supername”>Spider-Man</field> <field name=“powers”>agility</field> <field name=“powers”>spider sense</field> <field name=“story”>In his first appearance, Peter Parker …</field> </add></doc>
La balise <add> précise qu'on ajoute des documents. Chaque document est alors décrit entre les balises <doc>. Ici on ajoute le superhéro Spider-Man, identifié 0001, dont le nom est Peter Parker et qui comporte les pouvoirs d'agilité et la sensibilité d'une araignée.
Ajout du document
Une fois le document rédigé, on va l'indexer en utilisant n'importe quel logiciel qui sait faire du POSTing. Solr propose dans ses exemples, un JAR qui simplifie l'ajout de documents :
java -jar post.jar superheroes.xml
On peut par exemple utiliser l'outil Curl, mais il faut spécifier tous les paramètres. En ligne de commande, cela donne :
curl http://localhost:8983/solr/update -H "Content-type:text/xml" --data-binary @superheroes.xml
Ici, on précise bien que l'on envoie une donnée binaire de type texte au format XML, et on fournit la cible.
NB : On est forcé de passer par cette méthode si le port choisi n'est pas celui par défaut ou si l'on est pas en local.
NB2 : le Commit (notion vue plus bas) est automatique avec la version simplifiée du POST
Suppression d'un document
Le processus de suppression est réalisé de la même façon que l'ajout. Il est nécessaire de passer par un fichier
XML qui est POSTé.
Deux méthodes sont possibles pour supprimer un document.
-
Il est possible de supprimer un document par son identifiant :
<delete> <id>0001</id> </delete>
Ici le document identifié 0001 pourra être supprimé de l'index.
-
Si l'on veut modifier plusieurs documents, il est possible d'écrire une requête :
<delete> <query>powers:agility</query> </delete>
Ici tous les documents contenant un champ "powers" dont la valeur est "agility" pourront être supprimés.
Commit
L'ajout et la suppresson ne sont pas suffisants pour complètement ajouter ou supprimer un document. Il est obligatoire
de procéder à un <commit/> afin de rendre visible toute modification d'index :
<commit />
Cette opération ferme ainsi le flux d'index et supprime les éventuels doublons.
Il existe une version optimisée mais un peu plus coûteuse. Elle permet par la suite d'accélérer
les recherches, et réduit le nombre de segments d'index créé par Lucene :
<optimize />