Apache Solr

Recherches

Requête

Pour effectuer une recherche, il suffit de passer par une requête HTTP GET. Imaginons que l'on ait au préalable indexé le document "superheroes.xml" comme vu dans la section précédente. Le document propre à Superman est donc présent dans l'index.
On demande ici, tous les documents comportant un champ "powers" ayant pour valeur "agility". C'est en effet le cas pour Spider-Man. Il suffit d'accéder à l'URL Select suivante :

	http://localhost:8983/solr/select?q=powers:agility&start=0&rows=10&fl=name,supername
					

Les paramètres "start" et "rows" permettent de spécifier que l'on souhaite retourner 10 résultats depuis le début (index 0).
Le paramètre "fl" permet de spécifier quels sont les champs que l'on souhaite retourner pour les documents qui matchent. Si celui-ci n'est pas renseigné, tous les champs des documents matchés seront renvoyés. Dans notre cas, on veut uniquement le nom et le supernom des héros trouvés.

La réponse est formalisée en XML :

	<response>
	<lst name="responseHeader">
	<int name="status">0</int>
	<int name="QTime">0</int>
	<str name="q">powers:agility</str>
	</lst>
	<result name="response" numFound="1" start="0">
		<doc>
			<str name="name">Peter Parker</str>
			<str name="supername">Spider-Man</str>
		</doc>
	</result>
	</response>
					

Le status à 0 signifie que l'opération s'est correctement déroulée. Le QTime à 0 est le temps de traitement côté serveur.
On retrouve bien la requête dans le "q", en rouge. Dans cet exemple, un seul document est retourné (numFound=1). Il s'agit bien du document décrivant Spider-Man. On retrouve aussi les deux seuls champs demandés, en bleu, le nom et le super-nom.

Format de sortie

La réponse est par défaut retournée au format XML, mais de nombreux outils ont été conçus pour traiter la réponse dans différents langages. Ainsi, les langages les plus utilisés sont gérés :

Scoring

La notion de scoring correspond au calcul effectué afin de déterminer l'ordre des résultats suite à une requête.
Le calcul est de la forme :

score = tf * idf * lengthNorm * boosts

Avec :

Par défaut c'est donc le scoring qui est utilisé pour ordonner les résultats renvoyés suite à une requête. Ainsi, les documents disposant d'un scoring le plus élévé apparaîtront dans les premiers.

Mais il est toutefois possible de spécifier explicitement l'ordre des résultats. Si l'on veut par exemple que les résultats apparaissement par ordre alphabétique, il suffit de le préciser dans la requête :

	select?q=powers:agility;sort=name asc
					

"desc" permet de trier dans l'ordre descendant.
Si l'on souhaite afficher le score de chaque résultat retourné, il suffit de le spécifié dans le paramètre "fl" :

	select?q=powers:agility;fl=*,score			
					

L'astérisque signifie que l'on souhaite afficher tous les champs ; ici le calcul du score est ajouté.

Syntaxe des requêtes

Pour rappel, une requête est spécifiée derrière le "q=" dans l'URL Select (voir plus haut). Lorsque plusieurs termes séparés par des espaces sont spécifiés dans une requête, l'opérateur logique par défaut est le OR.
Voici quelques exemples de requêtes afin de balayer différentes syntaxes possibles :