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.

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 />