Apache Solr : une douce introduction




1) Solr

Solr est un serveur de recherche open-source développé en utilisant Lucene Core de Apache (une technologie de recherche et d’indexation basée sous Java).
Solr est utilisé par l’un des plus grands moteurs de recherche sur internet : Duckduckgo.

Il est aussi utilisé par plusieurs entreprises telles que Netflix, ebay, Buy.com, Disney, Bloomberg, etc..

1.2) Fonctionnalités de Solr :

  • Analyse de documents
  • Une recherche de texte avancée
  • Prise en charge de plusieurs langues telles que l’anglais, le français, japonais, etc..
  • Prise en charge de plusieurs extensions de fichier (CSV,XML,JSON,etc..)

2) Installation

Prérequis :

2.1) téléchargement et Installation de Java (Windows, Mac Os et Linux)

Important : Afin d’installer les composantes ci-dessous ainsi que pour le déploiement du serveur Solr vous devez avoir les privilèges d’administration sur votre machine; que cela soit pour Windows, Mac OS ou Linux.

Lien de téléchargement : https://www.java.com/fr/download/manual.jsp>

download_java

2.2) téléchargement et Installation de la Plate-forme Java JDK (Windows)

Vistez le lien suivant et téléchargez la dernière version de java

https://www.oracle.com/technetwork/java/javase/downloads/index.html

download_java

2.2) Téléchargement de Solr :

https://lucene.apache.org/solr/downloads.html

Une fois le téléchargement terminé copier l’archive dans votre bureau

Solr

3) Ajouter JAVA_HOME aux variables d’environnement de Windows

1
1
1

Téléchargement de Solr (Mac OS)

MacOs

Extraire les fichiers de l’archive (Mac Os ou Linux)

Ouvrir l’invite de commandes de votre Mac Os ou Linux

se déplacer vers le chemin où vous avez votre fichier avec la commande

cd

Extraire tous les fichiers avec la commande

tar zxf solr-8.2.0.tgz

4 ) Lancement du serveur Solr

  • Extraire tous les fichiers de l’archive " solr-8.2.0.zip "
  • Allez dans le dossier solr-8.2.0, puis dans le dossier " bin "
  • Copiez le chemin de votre dossier
  • Ouvrir l’invite de commandes (CMD) : Touche clavier Windows + R puis tapez cmd et cliquez sur ok
path
cmd
In [ ]:
solr start -p 8984

Afin d’accéder à l’interface de votre serveur Solr il suffit d’entrer l’adresse suivante dans votre navigateur.

http://localhost:8984

Solr

6) Commandes de base :

  • Lancer le serveur : solr start -p 8983
  • Voir l’état du serveur : solr status
  • Arrêter le serveur : solr stop -p 8983
  • Redémarrer le serveur : solr restart
  • Créer un nouveau Core : solr create -c nom_core
  • Supprimer un Core : solr delete -c nom_core
  • Avoir des informations sur l’utilisation d’une commande : solr -help
    Exemple d’utilisation : Nous voulons avoir plus d’informations sur l’utilisation de la commande " create_core ". Pour ce faire, nous allons utiliser la ligne de commande suivante : solr create_core -help
Solr s’exécute en arrière-plan, si vous voulez l’exécuter en premier plan, il faut utiliser la commande suivante
:
start -f -p 8983

create_core

7) Ajouter des documents à notre serveur (Indexing) Windows

7.1 En utilisant l’invite de commandes de Windows

java -jar -Dc=tal -Dauto=yes -Dport=8983 post.jar books.csv

Dans le cadre vert, le chemin du script java. Et dans le cadre rouge le chemin du document que vous voulez indexer.

indexing

7.1) Ajouter des documents à notre serveur (Indexing) Mac Os et Linux

Comparé à Windows, il est plus facile, d’ajouter des documents à votre serveur en utilisant le système d’exploitation Linux ou Mac OS.

Pour se faire, il suffit d’utiliser la commande suivante :
./post -c nom_core books.csv

7.2 En utilisant l’interface de Solr

interface

8) Types de documents pris en charge par Solr

Nous pouvons " indexer " plusieurs types de documents avec le serveur Solr, parmi ces documents, nous avons :

  • Pdf
  • Word
  • html
  • txt
  • csv
  • xml
  • json

8.1 CSV

Comma-Separated Values, connu sous le sigle CSV, est un format texte ouvert représentant des données tabulaires sous forme de valeurs séparées par des virgules.

Wikipédia : https://fr.wikipedia.org/wiki/Comma-separated_values

exemple

8.2 XML

XML ou " eXtensible Markup Language " est un langage de balisage qui a été conçu
pour stocker et transporter des données. La particularité du XML réside dans l’utilisation
d’étiquete ou " tag " en anglais, ce processus facilite la lecture des documents pour l’homme comme pour la machine.
exemple

8.3 JSON

avaScript Object Notation (JSON) est un format de données textuelles dérivé de la notation des objets du langage JavaScript. Il permet de représenter de l’information structurée comme le permet XML par exemple.

Wikipédia :https://fr.wikipedia.org/wiki/JavaScript_Object_Notation

exemple

9) Utilisation du XML pour l’ajout, la mise à jour et la suppression de documents

9.1 Ajouter un document

In [ ]:
<add>
  <doc>
    <field name="id">2019field>
    <field name="cat">bookfield>
    <field name="name">linguistiquefield>
    <field name="price">19field>
    <field name="inStock">truefield>
    <field name="author">Tesnièrefield>
    <field name="series_t">Talistefield>
    <field name="sequence_i">1field>
    <field name="genre_s">TALfield>
  doc>
  <doc>
    <field name="id">9782253088752field>
    <field name="cat">bookfield>
    <field name="name">Frankensteinfield>
    <field name="price">18field>
    <field name="inStock">3field>
    <field name="author">Mary W. Shelleyfield>
    <field name="series_t">Esotérisme et paranormalfield>
    <field name="sequence_i">2field>
    <field name="genre_s">TALfield>
  doc>
 <doc>
    <field name="id">2019field>
    <field name="cat">bookfield>
    <field name="name">to delfield>
    <field name="price">01field>
    <field name="inStock">02field>
    <field name="author">deletefield>
    <field name="series_t">delete mefield>
    <field name="sequence_i">1field>
    <field name="genre_s">solrfield>
  doc>
add>
add : Ceci est la balise racine qui nous permet d’ajouter un ou plusieurs documents à indexer.
doc : Le document que nous allons ajouter doit être entouré avec la balise < doc >

field : la balise < field > contient le nom du champ et la valeur (les données)
Avec la balise add indique à Solr qu’il faut ajouter le document. Si le document est déjà présent dans le serveur, alors ce dernier sera mis à jour sinon le document sera créé.

9.2 Mettre à jour un document

In [ ]:
<add>   
   <doc>     
      <field name = "id">9782253088752field>     
      <field name = "price" update = "add">16.99field>     
      <field name = "inStock" update = "set">truefield>        
   doc> 
add>
Nous pouvons aussi mettre à jour les documents en utilisant l’invite de commandes et la méthode poste :

-Sous Windows


- Sous Linux et Mac OS post -c nom_core update.xml

java -jar -Dc=nom_core -Dauto=yes -Dport=8983 post.jar C:\chemin\update.xml

9.3.1 Supprimer un document

In [ ]:
<delete>   
   <id>2019id>   
delete> 

9.3.2 Supprimer un champ

In [ ]:
<delete> 
   <query>price:1.0query> 
delete>

Vous pouvez supprimer des documents et des champs en utilisant l’invite de commandes.
Sous Linux et Mac Os :
./post -c my_core supprimer.xml
Sous Windows :
java -jar -Dc=nom_core -Dauto=yes -Dport=8983 C:\Users\yahia\Desktop\Solr\solr-8.2.0\example\exampledocs\post.jar C:\chemin\supprimer.xml

9.3.3 D’autres commandes

In [ ]:
<commit/> : Enregistre les dernières modifications.
<optimize/> : Enregistre les dernières modifications et opére certaines optimisations.
Avant de valider toute modification en attente, il est possible d’émettre une restauration pour supprimer
les opérations d’ajout et de suppression non validées avec la commande suivante :
In [ ]:
<rollback/> 

# Nous pouvons aussi faire appel à la commande  en utilisant une requête HTTP :
http://localhost:8983/solr/nom_core/update?rollback=true

10) HTTP

HTTP est un protocole extensible. Il s’appuie sur quelques concepts basiques comme la notion de ressources et d’URI, une structure de messages simple et une structure client-serveur pour le flux de communication. En plus de ces concepts basiques, de nombreuses extensions du protocole sont apparues au fil des années, ajoutant de nouvelles fonctionnalités et de nouvelles syntaxes en créant de nouvelles méthodes ou en-têtes HTTP.

Wikipédia :https://developer.mozilla.org/fr/docs/Web/HTTP/Basics_of_HTTP

11) Requête HTTP

HTTP définit un ensemble de méthodes de requête qui indiquent l’action que l’on souhaite réaliser sur la ressource indiquée.

Wikipédia :https://developer.mozilla.org/fr/docs/Web/HTTP/M%C3%A9thode

Les differents types de requête HTTP

  • GET : La méthode GET demande une représentation de la ressource spécifiée. Les requêtes GET doivent uniquement être utilisées afin de récupérer des données.

  • La méthode HEAD : La méthode HEAD demande une réponse identique à une requête GET pour laquelle on aura omis le corps de la réponse (on a uniquement l’en-tête).
  • La méthode POST :La méthode POST est utilisée pour envoyer une entité vers la ressource indiquée. Cela entraîne généralement un changement d’état ou des effets de bord sur le serveur.
  • Nous avons encore d’autres méthode telles que : PUT, DELETE, CONNECT, etc..

Exemple d’une requête HTTP :

https://www.google.com/search?q=solr

Pour en savoir plus sur les requête HTTP et leurs fonctionnement, je vous invite à visiter le site de la fondation Mozilla :

https://developer.mozilla.org/fr/docs/Web/HTTP/M%C3%A9thode

Récapitulatif de ce que nous avons vu jusque là :

  1. Une présentation de Solr et de ses fonctionnalités
  2. le Téléchargement et l’Installation de la Plate-forme Java (Windows et Mac OS)
  3. L’ajout de JAVA_HOME aux variables d’environnement de Windows
  4. Le téléchargement et le déploiement d’un serveur Solr (Windows, Mac OS et Linux)
  5. Les commandes de base de solr; des commandes qui nous permettent de créer, arrêter, redémarrer et de voir l’état du serveur
  6. Nous avons vu aussi, comment créer un Core et comment le supprimer ainsi qu’indexer plusieurs types de documents : XML, CSV, JSON
  7. Comment utiliser le XML pour ajouter, mettre à jour et supprimer des documents ou des champs
  8. les requêtes HTTP

12) La récupération des données avec les Requêtes dans Solr

Solr offre un grand ensemble de fonctionnalités pour la recherche de données.

Lorsqu’un utilisateur effectue une recherche dans Solr, la requête de recherche est traitée par un gestionnaire de requête. Un gestionnaire de requête est un plug-in Solr qui définit la logique à utiliser lorsque Solr traite une requête donnée.

Afin de traiter une requête de recherche, un gestionnaire de requêtes appelle un analyseur de requête(query parser), qui interprète les termes et les paramètres d’une requête. Différents analyseurs de requêtes prennent en charge une syntaxe différente. L’analyseur de requête par défaut de Solr est connu comme analyseur de requêtes standard, ou plus simplement comme analyseur de requêtes " lucene ". C’est ce dernier que nous allons voir dans ce cours.

Source des définitions : Apache Solr Reference Guide 8.1

query

Les Paramètres et leurs descriptions

q La chaîne de recherche qui indique ce que nous demandons à Solr selon une syntaxe donnée.
Et C’est le paramètre de requête principal d’Apache Solr
fq (Filter Queries) Ce paramètre représente la requête de filtre d’Apache Solr. Il limite le jeu de résultats aux documents correspondant à ce filtre.
exemple : fq = id:0553573403 & fq= id:0553579908
fl Ce paramètre spécifie la liste des champs à renvoyer pour chaque document du jeu de résultats.
wt Sert à définir le format de la réponse, par défaut, le paramètre affiche la réponse sous le format JSON
start Le paramètre start représente les décalages de départ pour les résultats d'une page. La valeur par défaut de ce paramètre est de 0.
rows Ce paramètre représente le nombre de documents à récupérer par page. La valeur par défaut de ce paramètre est de 10.
sort Ce paramètre spécifie la liste des champs, séparés par des virgules, en fonction desquels les résultats de la requête doivent être triés.(asc pour ordre croissant ou desc pour ordre décroissant).
debugQuery Si cela est vrai, une section supplémentaire sera ajoutée à la réponse avec une explication du chemin de lecture actuel.
omitHeader Par défaut, la réponse contient l'en-tête d'information des métadonnées relatives à la requête. Si ce paramètre est activer, alors ces métadonnées seront omises

Facet ou Faceting dans Solr

Lorsque vous effectuez une recherche dans Apache Solr, vous récupérez une seule page de résultats composée d'un certain nombre de documents correspondants. Avec l’activation du faceting vous pouvez obtenir une
perspective des données globales.

Dès que vous activez l'option "facet" dans Solr vous allez avoir trois champs supplémentaires dans votre interface :
Facet.query :
Le paramètre facet.query déclare une requête analysée par l’analyseur de requête Solr, qui sera
utilisé comme une facette avec les décomptes correspondants. Les résultats de cette facette vont
être affichés dans une section de réponse spécifique appelée facets_queries.

Facet fields :
Les champs de facettes sont les plus utilisés. Ils agrègent les résultats de recherche en utilisant
un ensemble de champs donnés.

Exemple :
localhost:8983/solr/tal/select?q=*:*&facet=true&facet.query=genre_s:fantasy

facet

Lucene Query Syntax ( La syntaxe des requêtes de Lucen)

Trouver des documents en utilisant des mots clés

Exemple :
Trouver les documents qui ont le champ : "book"

cat:book

Trouver des documents en utilisant des suites de mots ou de phrases

Exemple :
Trouver les documents dont l'auteur est "George R.R. Martin"

author:"George R.R. Martin"

Trouver des documents en utilisant deux champs différents avec l'opérateur AND

Exemple :
Trouver les documents dont l'auteur est "George R.R. Martin" et dont la catégorie est "livre"

author:"George R.R. Martin" AND cat: "book"

Trouver des documents en utilisant un champ ou un autre avec l'opérateur OR

Exemple :
Recherchez soit la suite de mots "George R.R. Martin" dans le champ de "auteur" ET le mots "book" dans le champ "livre", OU le mot "fantasy" dans le champ de genre.

(author:"George R.R. Martin" AND cat: "book") OR genre_s:fantasy

Trouver des documents en utilisant les premières lettres d'un mot ou d'une suite de mots

Trouver tous les noms de documents qui commencent par "the"
name : the*

Trouver des documents en utilisant les premières et les dernières lettres d'un mot

series_t: chr*les

Correspondance de proximité

Trouver des mots en spécifiant la distance qui les sépare

series_t:"The Prydain"~2

Correspondance de Portée

Les requêtes de plage permettent de faire correspondre les documents dont les valeurs de champ sont comprises entre les limites inférieure et supérieure spécifiées par la requête de plage.

id:[0380014300 TO 0553573403]

Liste des opérateurs dans Solr :

Les Opérateurs et leurs descriptions

AND Conjonction entre deux critères, qui doivent tous deux être satisfaits
OR (Une conjonction entre deux critères où au moins un doit être satisfait
+ Marque un terme comme obligatoire
- ou NOT Marque un terme comme interdit
Maintenant, vous avez les compétences requises pour bien commencer avec Apache Solr ! À vous de jouer 😉

Si vous avez aimé cet article, vous pouvez nous soutenir en vous souscrivant à un mois gratuit de "Amazon Prime" (que vous pouvez annuler à tout moment !)

Pour pouvez nous soutenir en cliquant ici <3