Solr (prononcé Solar) est un sous-projet open source basé sur la bi­blio­thèque de recherche et d’in­dexa­tion Lucene d’Apache. Solr est basé sur Lucene Core et est écrit en Java. En tant que serveur de recherche, Apache Solr est l’un des outils les plus po­pu­laires pour l’in­té­gra­tion de moteurs de recherche verticaux. Les avantages de Solr com­pren­nent un large éventail de fonctions (y compris, par exemple, la clas­si­fi­ca­tion à facettes des résultats de recherche) et l’in­dexa­tion accélérée. Il fonc­tionne également sur des con­te­neurs serveurs tels qu’Apaches Tomcat. Nous allons d’abord nous attarder sur les fonc­tion­na­li­tés d’Apache Solr, puis expliquer dans un tutoriel Solr ce qu’il faut bien con­si­dé­rer lors de la première uti­li­sa­tion du logiciel.

Les origines d’Apache Solr

Le serveur de recherche Solr a été construit sur la base de Lucene. Apaches Lucene Core a été développé par le con­cep­teur de logiciels Doug Cutting en 1997. Il l’a d’abord proposé via le service d’hé­ber­ge­ment de fichiers Sour­ce­Forge. En 1999, l’Apache Software Foun­da­tion a lancé le projet Jakarta pour soutenir et pro­mou­voir le dé­ve­lop­pe­ment de logiciels Java libres. En 2001, Lucene a également participé à ce projet et a également été écrit en Java. Depuis 2005, il fait partie des projets prin­ci­paux d’Apache et fonc­tionne sous une licence Apache gratuite. De Lucene sont issus plusieurs sous-projets tels que Lucy (Lucene, écrit en C) et Lucene.NET (Lucene en C#). Le serveur de recherche populaire Elas­tic­search est, comme Solr, aussi basé sur Lucene.

En plus d’être basé sur Lucene, Solr a été créé en 2004 : à cette époque, cependant, la servlet était encore appelé Solar et distribué par CNET Networks. « Solar » pour Search on Lucene and Resin.

En 2006, CNET a confié le projet à la Fondation Apache, où il a d’abord connu une nouvelle période de dé­ve­lop­pe­ment. Lorsque Solr a été mis à la dis­po­si­tion du public dans le cadre d’un projet distinct en 2007, il a ra­pi­de­ment attiré l’attention de la com­mu­nauté : en 2010, la com­mu­nauté Apache a intégré la servlet dans le projet Lucene. Ce dé­ve­lop­pe­ment conjoint garantit une bonne com­pa­ti­bi­lité. Le package est complété par Solr Cloud et l’analyseur syn­taxique Solr Tika.

Dé­fi­ni­tion

Apache Solr est une ap­pli­ca­tion serveur in­dé­pen­dante de recherche pour les projets Web basés sur Java. Le projet open source est basé sur la bi­blio­thèque Java Lucene. Solr intègre au­to­ma­ti­que­ment les documents en temps réel et forme des clusters dy­na­miques. Solr est com­pa­tible avec PHP, Python, XML et JSON. Le servlet possède une interface uti­li­sa­teur Web et les commandes sont échangées en HTTP. Solr permet aux uti­li­sa­teurs d’effectuer des re­cherches dif­fé­ren­ciées plein texte pour les documents Rich Text. Il est par­ti­cu­liè­re­ment adapté aux moteurs de recherche verticaux sur les pages Web statiques. L’extension Solr Cloud permet d’ajouter des éléments sup­plé­men­taires et une extension de la clas­si­fi­ca­tion des fragments.

In­tro­duc­tion à Solr : ex­pli­ca­tions des termes de base

Apache Solr est intégré dans Lucene sous la forme d’un servlet. Puisqu’il complète la bi­blio­thèque lo­gi­cielle Lucene, nous allons vous expliquer briè­ve­ment son fonc­tion­ne­ment. De plus, de nombreux sites Web utilisent Solr comme base pour leurs moteurs de recherche verticaux (Netflix et Ebay sont des exemples bien connus). Nous ex­pli­quons dans la section suivante ce que cela signifie exac­te­ment.

Qu’est-ce qu’Apache Lucene ?

Le logiciel open source Lucene est une bi­blio­thèque Java open source et gratuite que vous pouvez utiliser in­dé­pen­dam­ment de la pla­te­forme. Lucene est connue comme une bi­blio­thèque NoSQL puissante et évolutive. Le logiciel d’in­dexa­tion est par­ti­cu­liè­re­ment adapté à l’uti­li­sa­tion des moteurs de recherche Internet, aussi bien pour les re­cherches sur l’ensemble du World Wide Web que pour les re­cherches à l’échelle du domaine et des requêtes locales.

Remarque

Lucene Core est une bi­blio­thèque lo­gi­cielle (ou plus sim­ple­ment « bi­blio­thèque », ou « bi­blio­thèque de com­po­sants ») pour le langage de pro­gram­ma­tion Java. Les bi­blio­thèques servent uni­que­ment de col­lec­tion ordonnée de sous-pro­grammes. Les dé­ve­lop­peurs utilisent ces col­lec­tions pour relier les pro­grammes aux modules auxi­liaires via une interface. Pendant l’exécution d’un programme, il peut accéder au composant requis dans la bi­blio­thèque.

Comme la bi­blio­thèque divise les documents en champs texte et les classe de manière logique, la recherche plein texte via Lucene fonc­tionne très pré­ci­sé­ment. Lucene trouve également des résultats per­ti­nents pour des textes/documents si­mi­laires. Pour cette raison, la bi­blio­thèque est également adaptée à l’éva­lua­tion de pages telles que Yelp. Tant qu’il reconnaît le texte, le format (texte brut, PDF, HTML ou autres) ne joue pas de rôle et n’est pas important. Au lieu d’indexer des fichiers, Lucene travaille avec du texte et des mé­ta­don­nées. Néanmoins, les fichiers doivent être lus à partir de la bi­blio­thèque.

À cette fin, l’équipe de Lucene a développé le projet Apache Tika qui est main­te­nant in­dé­pen­dant. Apache Tika est un outil pratique pour l’analyse, la tra­duc­tion ou l’in­dexa­tion de textes. L’outil lit le texte et les mé­ta­don­nées de plus de mille types de fichiers. Il extrait ensuite le texte et le met à dis­po­si­tion pour la suite du trai­te­ment. Tika se compose d’un analyseur et d’un détecteur. L’analyseur analyse les textes et structure le contenu dans une hié­rar­chie ordonnée. Le détecteur typifie le contenu. Par exemple, il reconnaît le type de fichier mais aussi le type de contenu des mé­ta­don­nées

Les fonctions et les ca­rac­té­ris­tiques im­por­tantes de Lucene:

  • In­dexa­tion rapide, par étapes et par lots (jusqu’à 150 Go par heure selon vos propres spé­ci­fi­ca­tions)
  • Uti­li­sa­tion éco­no­mique de la RAM
  • Tous écrits en Java, donc mul­ti­pla­te­forme (les variantes des langages de pro­gram­ma­tion al­ter­na­tifs sont Apache Lucy et Lucene.NET)
  • Interface pour plugins
  • Recherche de champs de texte (ca­té­go­ries telles que contenu, titre, auteur, mot-clé), aussi pour plusieurs en même temps
  • Trier par champ texte
  • Liste des résultats de recherche par si­mi­la­rité/per­ti­nence

Lucene divise les documents en champs tels que titre (« title »), auteur (« author ») et corps de texte (« text »). Le logiciel utilise l’analyseur de requêtes (Query Parser) pour re­cher­cher dans ces champs. Ceci est considéré comme un outil par­ti­cu­liè­re­ment efficace pour les requêtes de recherche avec saisie manuelle de texte. La syntaxe simple se compose d’un terme de recherche et d’un mo­di­fi­ca­teur. Les termes de recherche peuvent être des mots simples ou des groupes de mots. Vous pouvez les ajuster avec un mo­di­fi­ca­teur ou combiner plusieurs termes avec des variables boo­léennes pour former une requête complexe. Dans le manuel d’uti­li­sa­tion Apache de la syntaxe du Query Parser vous trouverez les commandes exactes.

Lucene est également com­pa­tible avec la recherche ap­proxi­ma­tive basée sur la distance de Le­ven­sh­tein. Cette dernière saisit le nombre de chan­ge­ments de ca­rac­tères (c’est-à-dire remplacer, insérer ou supprimer) pour passer d’une chaîne sig­ni­fi­ca­tive à une autre. Un exemple : « loupe » (remplacer p par k) pour « louke » a une distance de 1 car une seule opération de con­ver­sion était né­ces­saire.

Vous pouvez définir vous-même une valeur qui détermine l’ampleur des écarts par rapport au critère de recherche d’origine afin que le terme en question soit toujours pris en compte dans les résultats de recherche. Cette valeur est comprise entre 0 et 1, plus elle est proche de 1, plus le résultat de la recherche doit res­sem­bler au mot original. Si vous n’entrez pas de valeur, elle est au­to­ma­ti­que­ment de 0.5. La commande cor­res­pon­dante ressemble alors à ceci.

loupe~

Si vous voulez spécifier une certaine valeur (dans l’exemple 0.9), entrez la commande suivante :

loupe~0.9

La recherche ap­proxi­ma­tive est struc­tu­rée de la même manière, avec laquelle vous re­cher­chez des mots et dé­ter­mi­nez également à quelle distance les termes de recherche peuvent se trouver dans le texte afin de rester per­ti­nents. Par exemple, si vous re­cher­chez l’ex­pres­sion « Alice au pays des mer­veilles », vous pouvez spécifier que les termes « Alice » et « Pays des mer­veilles » doivent se trouver dans un rayon de 5 mots :

"alice au pays des merveilles"~5

Qu’est-ce qu’un moteur de recherche vertical ?

Lucene permet d’effectuer des re­cherches sur le World Wide Web et dans les domaines. Les moteurs de re­cherches qui couvrent un large éventail de pages sont connues sont le nom de moteur de recherche ho­ri­zon­tal. Cela regroupe les plus grands four­nis­seurs comme Google, Bing et Yahoo, mais aussi Du­ck­DuckGo et Startpage. Un moteur de recherche vertical, par contre, est limité soit à un domaine, soit à un sujet spé­ci­fique, soit à un groupe cible. Un moteur de recherche de domaine spé­ci­fique aide les visiteurs de votre site à trouver des offres et des textes de votre présence Web. Les portails de re­com­man­da­tion tels que Tri­pAd­vi­sor ou Yelp, mais aussi les sites de recherche d’emploi sont des exemples de moteurs de recherche thé­ma­tique. Les moteurs de recherche spé­ci­fiques à un groupe cible sont destinés, par exemples, aux enfants et aux ado­les­cents ou bien aux scien­ti­fiques qui re­cherchent des sources.

Grâce à des robots d’in­dexa­tion ciblés (au lieu des robots d’in­dexa­tion Web), les moteurs de recherche verticaux trouvent des résultats plus précis. Une bi­blio­thèque comme Lucene, qui divise son index en classes en utilisant les méthodes de la taxonomie et les relie lo­gi­que­ment en utilisant l’ontologie, rend cette recherche exacte en plein texte possible. Les moteurs de recherche verticaux utilisent aussi des filtres thé­ma­tiques ap­pro­priés qui limitent le nombre de résultats.

Remarque

L’ontologie et la taxonomie sont deux méthodes et principes qui en in­for­ma­tique sont im­por­tants pour un archivage correct. La taxonomie traite de la division des termes en classes. Ceci les divise en une hié­rar­chie qui est similaire à un diagramme en ar­bo­res­cence. L’ontologie va plus loin et place les termes dans une relation logique entre eux. Les groupes de termes sont regroupés en grappes qui signalent une relation étroite. De plus, des groupes de termes connexes sont reliés les uns aux autres, créant ainsi un réseau de relations.

L’index de Lucene est une archive pratique et évolutive pour des re­cherches rapides. Mais il y a certaines étapes es­sen­tielles que vous devez répéter fré­quem­ment, mais elles ne sont pas au­to­ma­tiques. Après tout, la recherche verticale nécessite un index très ramifié. C’est là qu’Apache Solr in­ter­vient. Le serveur de recherche complète les fonctions de la bi­blio­thèque. Et Solr peut être configuré ra­pi­de­ment et fa­ci­le­ment avec les bonnes commandes, même pour les débutants en Java. Le servlet vous offre de nombreux outils pratiques avec lesquels vous pouvez mettre en place un moteur de recherche vertical pour votre site Web en un rien de temps, et l’adapter aux besoins de vos visiteurs.

Qu’est-ce que Solr ? Fonc­tion­ne­ment du serveur de recherche

Main­te­nant que vous disposez d’in­for­ma­tions de base sur la fondation de Lucene et le champ d’ap­pli­ca­tion de Solr, nous allons vous expliquer comment fonc­tionne le serveur de recherche, comment il étend Lucene, et comment vous pouvez tra­vail­ler avec lui.

Solr : les éléments de base

Solr est écrit en Java, vous pouvez donc utiliser la plate-forme de servlet in­dé­pen­dam­ment. Les commandes sont gé­né­ra­le­ment écrites en HTTP (Hypertext Transfer Protocol), pour les fichiers à en­re­gis­trer, utilisez XML (Ex­ten­sible Markup Language). Apache Solr offre également aux dé­ve­lop­peurs Python et Ruby leur langage de pro­gram­ma­tion familier via une API (ap­pli­ca­tion pro­gram­ming interface). Pour ceux qui tra­vail­lent nor­ma­le­ment avec Ja­vaS­cript Object Notation (en abrégé : JSON), Apache Solr fournit Elas­tic­Search fournit l’en­vi­ron­ne­ment optimal. Cependant, Solr peut également tra­vail­ler avec ce format via une API. Bien que le serveur de recherche soit basé sur Lucene et s’intègre par­fai­te­ment dans son ar­chi­tec­ture, Solr travaille également seul. Il est com­pa­tible avec les con­te­neurs serveur comme Apache Tomcat.

In­dexa­tion pour des résultats de recherche précis, en quelques fractions de seconde

Struc­tu­rel­le­ment, le servlet est basé sur un fichier index inversé (terme anglais : inverted index). Solr utilise la bi­blio­thèque de Lucene à cette fin. Les fichiers inversés sont un sous-type de l’index de la base de données. Ils sont censés accélérer l’appel de l’in­for­ma­tion. Dans la bi­blio­thèque, l’index stocke le contenu. Il peut s’agir de mots ou de chiffres. Si un uti­li­sa­teur recherche un certain contenu sur un site Web, la personne saisit ha­bi­tuel­le­ment un ou deux termes de recherche per­ti­nents pour le sujet. Au lieu d’utiliser des robots d’ex­plo­ra­tion pour re­cher­cher ces mots dans l’ensemble du site Web, Solr utilise alors la bi­blio­thèque.

Cela indexe tous les mots-clés im­por­tants presque en temps réel et les lie aux documents du site Web dans lequel les mots re­cher­chés se trouvent. La recherche parcourt sim­ple­ment l’index pour trouver un terme. La liste des résultats affiche tous les documents qui con­tien­nent ce mot au moins une fois selon l’index. Ce type de recherche cor­res­pond à la recherche analogue dans un ouvrage de référence : si vous cherchez un mot-clef dans le registre à la fin de l’ouvrage, vous y trouverez les in­for­ma­tions sur les pages du texte entier sur les­quelles vous trouverez le terme. Là, vous n’avez qu’à naviguer. La recherche verticale sur le Web affiche donc une liste de résultats avec des liens vers les documents res­pec­tifs.

Pour que ce processus fonc­tionne cor­rec­te­ment, il est théo­ri­que­ment né­ces­saire d’entrer tous les mots-clefs et mé­ta­don­nées (comme le nom de l’auteur ou l’année de pu­bli­ca­tion) dans la bi­blio­thèque chaque fois qu’un nouveau document est ajouté au portfolio du site. Cela rend le travail de Lucene dans le backend un peu fas­ti­dieux. Mais Solr peut au­to­ma­ti­ser de telles étapes.

Per­ti­nence et filtres

Apache Solr utilise l’ontologie et la taxonomie de Lucene pour fournir des résultats de recherche très précis. Les variables boo­léennes et la tron­ca­ture, qui sont déjà connues de Lucene, aident. Solr ajoute un cache Higher-Level au cache de Lucene. Cela signifie que le servlet se souvient des requêtes de recherche courantes, même si elles sont cons­ti­tuées de variables complexes. Il optimise ainsi la vitesse de recherche.

Si vous voulez garder les in­ter­nautes sur votre site Web, vous devriez leur offrir une bonne ex­pé­rience uti­li­sa­teur. Il s’agit en par­ti­cu­lier de proposer les offres adaptées. Par exemple, si vos visiteurs cherchent de l’in­for­ma­tion sur l’élevage du poulet, les premiers résultats de recherche en haut de la liste devraient être des textes et articles sur l’élevage du poulet et les habitudes ali­men­taires. Les recettes avec du poulet ou même des films sur les poulets ne devraient pas être inclus dans les résultats de recherche ou du moins ap­pa­raître plus bas dans la liste.

Peu importe si les uti­li­sa­teurs re­cherchent un terme spé­ci­fique ou s’ils devraient voir des sug­ges­tions de sujets in­té­res­sants avec des liens internes à la fin d’un article pas­sion­nant : dans les deux cas, la per­ti­nence des résultats est pri­mor­diale. Solr utilise la mesure TF-IDF pour s’assurer que le chercheur ne voit que les résultats de recherche qui le con­cer­nent.

Remarque

Le terme Term-Frequency-Inverse-Document-Frequency ou TF-IDF (en français : fréquence inverse des documents d’un terme) désigne une sta­tis­tique numérique. Il compare la densité, la rareté ou l’uti­li­sa­tion des termes de recherche dans un document (le nombre de fois qu’un seul terme apparaît dans le texte) avec le nombre de documents dans l’ensemble du groupe de recherche qui con­tien­nent le terme. De cette façon, vous pouvez voir si un terme de recherche apparaît réel­le­ment plus fré­quem­ment dans le contexte d’un document que dans l’ensemble des textes.

Solr : les fonctions les plus im­por­tantes

Apache Solr collecte et indexe les données en temps quasi réel, avec l’aide de Lucene Core. Les données re­pré­sen­tent des documents. Dans la recherche comme dans l’in­dexa­tion, le document est la mesure clef. L’index se compose de plusieurs documents, qui à leur tour se composent de plusieurs champs texte. La base de données contient un document dans une ligne de table. Un champ est dans la colonne de la table.

Couplé via une API avec Apache Zookeper, Solr dispose d’un point de contact central qui assure la syn­chro­ni­sa­tion, les registres de noms et la dis­tri­bu­tion des con­fi­gu­ra­tions. Ceci inclut, par exemple, un al­go­rithme d’élection sur un anneau qui affecte un coor­di­na­teur (aussi : Leader) aux processus dans un système réparti. Le Trouble Shooter Zookeeper, qui a fait ses preuves, réen­clenche également les processus en cas de perte de token et trouve les nœuds (or­di­na­teurs dans le système) à l’aide de Node-Discovery. Toutes ces fonctions ga­ran­tis­sent que votre projet reste toujours librement évolutif.

Cela signifie également que le moteur de recherche fonc­tionne même dans les con­di­tions les plus dif­fi­ciles. Comme nous l’avons mentionné pré­cé­dem­ment, les sites Web avec un trafic à forte intensité qui stockent et gèrent d’énormes quantités de données chaque jour utilisent également Apache Solr.

Si un seul serveur Solr n’est pas suffisant, il suffit de connecter plusieurs serveurs via le Solr Cloud. Vous pouvez ensuite frag­men­ter ho­ri­zon­ta­le­ment vos ensembles de données, ceci est également appelé Sharding. Pour ce faire, vous divisez votre bi­blio­thèque en fragments lo­gi­que­ment liés. Cela vous permet d’étendre votre bi­blio­thèque au-delà de l’espace de stockage nor­ma­le­ment dis­po­nible. Apache vous re­com­mande également de té­lé­char­ger plusieurs copies de votre bi­blio­thèque sur dif­fé­rents serveurs. Cela augmente votre facteur de ré­pli­ca­tion. Si plusieurs requêtes arrivent en même temps, elles sont alors dis­tri­buées aux dif­fé­rents serveurs.

La recherche plein texte, que Lucene a déjà in­tro­duite, est étendue par Solr avec d’autres fonctions. Ces fonctions de recherche com­pren­nent, entre autres :

  • Adap­ta­tion du terme également pour les groupes de mots : le système détecte les fautes d’or­tho­graphe dans l’entrée de recherche et fournit les résultats d’une al­ter­na­tive corrigée.
  • Joins : un mélange du produit cartésien (plusieurs termes sont pris en compte dans la recherche dans n’importe quel ordre) et de la sélection (seuls les termes répondant à une certaine condition sont affichés), c’est-à-dire une syntaxe variable booléenne complexe.
  • Re­grou­pe­ment de termes liés thé­ma­ti­que­ment.
  • Clas­si­fi­ca­tion à facettes : le système classe chaque élément d’in­for­ma­tion en fonction de plusieurs di­men­sions. Par exemple, il lie un texte à des mots-clés tels que le nom de l’auteur, la langue et la longueur du texte. En outre, il y a des sujets que le texte traite ainsi qu’un clas­se­ment chro­no­lo­gique. La recherche par facette permet à l’uti­li­sa­teur d’utiliser plusieurs filtres et d’obtenir ainsi une liste in­di­vi­duelle de résultats.
  • Recherche par mé­ta­ca­rac­tère (Wildcard) : un caractère re­pré­sente un élément indéfini ou plusieurs éléments de ce type dans une chaîne de ca­rac­tères ? Pour un caractère vous utilisez « ? », pour plusieurs vous utilisez « * ». Par exemple, vous pouvez saisir un fragment de mot plus le caractère de rem­pla­ce­ment (par exemple : Prof*). La liste des résultats inclut alors tous les termes contenant ce mot racine (par exemple : pro­fes­sion, pro­fes­seur, pro­fes­sion­nel, professer etc.). De cette façon, les uti­li­sa­teurs reçoivent des résultats pour ce domaine. La per­ti­nence né­ces­saire résulte de la dé­li­mi­ta­tion du sujet de votre bi­blio­thèque ou d’autres dé­li­mi­ta­tions de recherche. Par exemple, si les uti­li­sa­teurs re­cherchent « b?nd », ils recevront des résultats tels que bond ou band. Cependant, des mots tels que « bondire » ou « bandage » ne sont pas inclus dans la recherche, car le « ? » ne remplace qu’une seule lettre.
  • Reconnaît le texte dans de nombreux formats, de Microsoft Word aux éditeurs de texte en passant par les PDF et le contenu riche indexé.
  • Détecte dif­fé­rentes langues

De plus, le servlet peut intégrer plusieurs noyaux (Cores en anglais). Ces Cores sont cons­ti­tués d’index de Lucene. Le noyau recueille toutes les in­for­ma­tions dans une bi­blio­thèque. Les fichiers de con­fi­gu­ra­tion et les schémas peuvent aussi y être trouvés. Ceci définit le com­por­te­ment d’Apache Solr. Si vous souhaitez utiliser des ex­ten­sions, intégrez sim­ple­ment vos propres scripts ou plugins issus des con­tri­bu­tions com­mu­nau­taires dans le fichier de con­fi­gu­ra­tion.

Avantages In­con­vé­nients
Extension de Lucene avec des fonctions pratiques In­dexa­tion au­to­ma­tique en temps réel Recherche plein texte Clas­si­fi­ca­tion à facettes et re­grou­pe­ment de mots-clefs Contrôle total sur les fragments Facilite la sca­la­bi­lité ho­ri­zon­tale des serveurs de recherche Facile à intégrer dans votre propre site Web Moins adapté pour les données et objets dy­na­miques Ajout de noyaux et frac­tion­ne­ment des fragments possible uni­que­ment ma­nuel­le­ment. Le cache global peut coûter du temps et de l’espace par rapport au cache segmenté.

Tutoriel : té­lé­char­ger et con­fi­gu­rer Apache Solr

La con­fi­gu­ra­tion système requise pour Solr n’est pas très élevée. Tout ce dont vous avez besoin est un Java SE Runtime En­vi­ron­ment à partir de la version 1.8.0. Les dé­ve­lop­peurs ont testé le servlet sous Linux/Unix, macOS et Windows dans dif­fé­rentes versions. Té­lé­char­gez sim­ple­ment le paquet d’ins­tal­la­tion approprié et extraire le fichier.zip (paquet Windows) ou le fichier.tgz (paquet Unix, Linux et OSX) dans un ré­per­toire de votre choix.

Tutorial Solr : étape 1, té­lé­char­ger et démarrer

  1. Visitez la page du projet Solr dans le projet principal Apache Lucene. En haut de la fenêtre, vous verrez la barre de menu. Sous « Features », Apache vous informe briè­ve­ment sur les fonctions Solr. Voir « Resources » pour les tutoriels et la do­cu­men­ta­tion. Sous « Com­mu­nauty », les adeptes de Solr vous aideront à répondre à vos questions. Dans cette section, vous pouvez également con­tri­buer vos propres builds.
  2. Cliquez sur le bouton de té­lé­char­ge­ment pour l’ins­tal­la­tion. Ceci vous amènera à la page de té­lé­char­ge­ment avec une liste de té­lé­char­ge­ments de miroirs. La version Solr actuelle (7.3, à partir de mai 2018) d’un four­nis­seur certifié devrait figurer en tête de liste. Vous pouvez également choisir entre les liens HTTP et le té­lé­char­ge­ment FTP. Si vous cliquez sur un lien, vous accédez à la page miroir du four­nis­seur cor­res­pon­dant
  1. Dans l’image ci-dessus, vous pouvez voir les dif­fé­rents packs de té­lé­char­ge­ment dis­po­nibles, et dans ce cas pour Solr version 7.3.
  • solr-7.3.0-src.tgz est le paquet pour les dé­ve­lop­peurs. Il contient le code source, donc vous pouvez tra­vail­ler dessus en dehors de la com­mu­nauté GitHub.
  • solr-7.3.0.tgz est la version pour les uti­li­sa­teurs Mac et Linux ou Unix.
  • solr-7.3.0.zip contient le paquet Solr com­pa­tible Windows.
  • Dans le dossier changes/. vous trouverez la do­cu­men­ta­tion de la version cor­res­pon­dante.

Une fois que vous avez sé­lec­tionné la version optimale pour vos besoins par un clic de souris, une fenêtre de té­lé­char­ge­ment apparaît. Sau­ve­gar­dez le fichier. Une fois le té­lé­char­ge­ment terminé, cliquez sur le bouton de té­lé­char­ge­ment dans votre na­vi­ga­teur ou ouvrez votre dossier de té­lé­char­ge­ment.

  1. Dé­com­pres­sez le fichier zip ou le fichier.tgz. Si vous voulez d’abord vous fa­mi­lia­ri­ser avec Solr, sé­lec­tion­nez un ré­per­toire au choix. Sau­ve­gar­dez les fichiers dé­com­pres­sés ici. Si vous savez déjà dans quelle mesure vous souhaitez utiliser Solr, sé­lec­tion­nez le serveur prévu à cet effet. Ou créez un en­vi­ron­ne­ment Solr Cloud en grappe si vous souhaitez l’étendre. (Plus d’in­for­ma­tions sur le Cloud dans le chapitre suivant)
Conseil

En théorie, une seule bi­blio­thèque Lucene peut indexer environ 2,14 milliards de documents. Dans la pratique, cependant, vous n’at­tein­drez gé­né­ra­le­ment pas ce nombre avant que le nombre de documents n’affecte la per­for­mance. Avec un nombre de documents cor­res­pon­dant élevé, il est donc conseillé de planifier dès le départ avec un Solr Cloud.

  1. Dans notre exemple Linux, Solr est sur Home. Nous tra­vail­lons avec Solr 7.3.0, le code de ce tutoriel a été testé sous Ubuntu. Vous pouvez également utiliser les exemples pour macOS. Les commandes fonc­tion­nent en principe aussi sous Windows, mais avec des barres obliques inverses au lieu des barres obliques normales.

Entrez « cd /[chemin source] » dans la ligne de commande pour ouvrir le ré­per­toire Solr et démarrer le programme. Dans notre exemple, il ressemble à ceci :

cd /home/test/Solr/solr-7.3.0
bin/solr start

Le serveur Solr fonc­tionne main­te­nant sur le port 8983, et votre pare-feu peut vous demander si vous l’autorisez. Confirmez alors ceci.

Si vous voulez arrêter Solr, entrez la commande suivante :

bin/solr stop -all

Si Solr fonc­tionne, fa­mi­lia­ri­sez-vous avec le logiciel. Avec la démo Solr, vous pouvez également démarrer le programme dans l’un des quatre modes suivants :

  • Cloud Solr(Commande : cloud)
  • Ges­tion­naire d’im­por­ta­tion de données (Commande : dih)
  • Sans schéma (Commande : sche­ma­less)
  • Exemple détaillé avec Kitchen-Sink (Commande : tech­pro­ducts)

Les exemples ont chacun un schéma adapté. Traitez-le à l’aide de l’interface de schéma. Pour ce faire, entrez cette commande (le mé­ta­ca­rac­tère [exemple] re­pré­sente l’un des mots-clés spécifiés ci-dessus) :

bin/solr -e [exemple]
  1. Solr fonc­tion­nera donc dans le mode approprié. Si vous voulez être sûr, ouvrez le Sta­tus­re­port :
bin/solr status
Found 1 Solr nodes:
Solr process xxxxx running on port 8983
  1. Les exemples con­tien­nent des réglages de base pré­con­fi­gu­rés. Si vous commencez sans exemple, vous devez définir le schéma et le noyau vous-même. Le noyau stocke vos données. Sans elle, vous ne pouvez ni indexer ni re­cher­cher des fichiers. Pour créer un noyau, entrez la commande suivante :
bin/solr create –c <nom_du_noyau>
  1. Apache Solr dispose d’une interface uti­li­sa­teur basée sur le Web. Si vous avez démarré le programme avec succès, vous trouverez l’ap­pli­ca­tion Web Solr-Admin dans votre na­vi­ga­teur sur http://localhost:8983/solr/.
  1. enfin vous arrêtez Solr à nouveau avec cette commande :
bin/solr stop -all

Tutoriel Solr : partie 2 : premières étapes

Solr met à votre dis­po­si­tion un outil de commande simple. Avec ce qu’on appelle le Post-Tool, vous pouvez té­lé­char­ger du contenu sur votre serveur. Il peut s’agir de documents pour l’index ou de con­fi­gu­ra­tions de schéma. L’outil accède à votre col­lec­tion à cette fin. Par con­sé­quent, vous devez toujours spécifier le noyau ou la col­lec­tion avant de l’utiliser.

Dans l’exemple de code suivant, nous donnons d’abord la forme générale. Remplacez <col­lec­tion> par le nom de votre noyau/col­lec­tion. « -c » est la commande « create ». Ceci crée un noyau ou une col­lec­tion. Derrière, vous dé­fi­nis­sez des options sup­plé­men­taires ou exécutez des commandes. Par exemple, vous pouvez utiliser « -p » pour sé­lec­tion­ner un port et « *.xml » ou « *.csv » pour té­lé­char­ger tous les fichiers au format approprié dans votre col­lec­tion (lignes deux et trois). La commande « -d » supprime les documents de votre col­lec­tion (ligne quatre).

bin/post –c <collection> [Options] <Fichiers|Collections|URLs>
bin/post –c <collection> -p 8983 *.xml
bin/post –c <collection> *.csv
bin/post –c <collection> -d ‘<delete><id>42</id><delete>‘

Vous con­nais­sez main­te­nant certaines des commandes de base de Solr. L’exemple de la version démo de Kitchen-Sink vous montrera exac­te­ment comment con­fi­gu­rer Apache Solr.

  1. Démarrer Solr avec la version démo. Pour la démo Kitchen-Sink utilisez la commande tech­pro­ducts.  Entrez ce qui suit dans le terminal :
bin/solr –e techproducts

Solr démarre sur le port 8983 par défaut, le terminal vous indique qu’il est en train de créer un nouveau noyau pour votre col­lec­tion et indexe quelques fichiers échan­til­lons pour votre catalogue. Vous devriez voir ce qui suit dans la démo Kitchen-Sink :

Creating Solr home directory /tmp/solrt/solr-7.3.1/exemple/techproducts/solr
Starting up Solr on port 8983 using command:
bin/solr start -p 8983 -s "exemple/techproducts/solr"
Waiting up to 30 seconds to see Solr running on port 8983 [/]
Started Solr server on port 8983 (pid=12281). Happy searching!
Setup new core instance directory:
/tmp/solrt/solr-7.3.1/example/techproducts/solr/techproducts
Creating new core ‘techproducts’ using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=techproducts&instanceDir=techproducts
{"responseHeader":
{"status":0,
"QTime":2060},
"core":"techproducts"}
Indexing tech product example docs from /tmp/solrt/solr-7.4.0/exemple/exampledocs
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update…
using content-type application/xml...
POSTing file money.xml to [base]
POSTing file manufacturers.xml to [base]
POSTing file hd.xml to [base]
POSTing file sd500.xml to [base]
POSTing file solr.xml to [base]
POSTing file utf8-example.xml to [base]
POSTing file mp500.xml to [base]
POSTing file monitor2.xml to [base]
POSTing file vidcard.xml to [base]
POSTing file ipod_video.xml to [base]
POSTing file monitor.xml to [base]
POSTing file mem.xml to [base]
POSTing file ipod_other.xml to [base]
POSTing file gb18030-example.xml to [base]
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:00.486
Solr techproducts example launched successfully. Direct your Web browser to
http://localhost:8983/solr to visit the Solr Admin UI
  1. Solr est main­te­nant en cours d’exécution et a déjà chargé quelques fichiers XML dans l’index. Vous pourrez l’utiliser plus tard. Dans l’étape suivante, vous devriez essayer d’in­tro­duire vous-même certains fichiers dans l’index. L’interface uti­li­sa­teur Solr-Admin rend cela très simple. Appelez le serveur Solr dans votre na­vi­ga­teur. Dans notre démo Tech­pro­ducts, Solr spécifie déjà le serveur et le port. En con­sé­quence, entrez l’adresse suivante dans votre na­vi­ga­teur : "http:://localhost:8983/solr/".

Si vous avez déjà défini vous-même un nom de serveur et un port, utilisez le for­mu­laire suivant et insérez le nom du serveur et le numéro de port à l’endroit approprié dans chaque place : "http://[Nom­de­ser­veur]:[Numero-Port]/solr/".

Vous y contrôlez le dossier exemple/exem­ple­docs. Ce dossier contient des fichiers d’exemple et le fichier post.jar. Sé­lec­tion­nez un fichier que vous voulez ajouter au catalogue et utilisez post.jar pour ajouter le fichier. Pour notre exemple, nous prenons more_books.jsonl.

Pour ce faire, saisissez les in­for­ma­tions suivantes dans le terminal :

cd exemple/exempledocs
Java -Dc=techproducts –jar post.jar more_books.jsonl

Si Solr a réussi à charger votre fichier dans l’index, vous recevrez ce message :

SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update 
POSTing file more_books.jsonl to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:00.162
  1. Si vous con­fi­gu­rez le serveur de recherche Apache Solr, vous devez con­fi­gu­rer di­rec­te­ment les fichiers de con­fi­gu­ra­tion et le schéma. Ceux-ci sont donnés dans les exemples de dé­mons­tra­tion. Si vous tra­vail­lez sur un nouveau serveur, vous devez dé­ter­mi­ner vous-même le Config-Set et le schéma.

Le schéma (schema.xml) définit le nombre, le type et la structure des champs. Comme déjà mentionné, un document dans Lucene se compose de champs. Cette sub­di­vi­sion facilite la recherche ciblée en plein texte. Solr travaille avec ces champs. Un certain type de champ accepte certains contenus (par ex. <date> seulement les dates dans le for­mu­laire année-mois-jour-temps). Utilisez le schéma pour dé­ter­mi­ner les types de champs que l’index reconnaît ul­té­rieu­re­ment et comment il les affecte. Si vous ne le faites pas, les documents in­tro­duits dans le système spé­ci­fient les types de champs. Ceci est utile dans la phase de test parce que vous commencez sim­ple­ment à remplir le catalogue. Par la suite, cependant, une telle procédure peut entraîner des problèmes.

Voici quelques types de champs Solr de base :

  • Da­te­Ran­ge­Field (Périodes indexées et dates jusqu’à la mil­li­se­conde)
  • Ex­ter­nal­Fi­le­Field (extrait les valeurs d’un dossier externe)
  • TextField (Zone générale pour la saisie de texte)
  • Bi­na­ry­Field (indexe deux valeurs sé­pa­ré­ment, mais les affiche à l’uti­li­sa­teur final comme une seule valeur.)
  • Cur­ren­cy­Field indexe deux valeurs sé­pa­ré­ment, mais les affiche à l’uti­li­sa­teur final comme une seule valeur. Cur­ren­cy­Field en­re­gistre une valeur numérique (par exemple, 4,50) et une devise (par exemple, €) dans chaque zone. L’uti­li­sa­teur final voit les deux valeurs ensemble (soit 4,50 €).
  • StrField (UTF-8 et Unicode-String dans un champ petit. Ils ne sont pas analysés ou bien remplacés par un token.)

Pour une liste détaillée des types de champs Solr et d’autres commandes de pa­ra­mé­trage de schéma, voir le Wiki Solr.

Pour définir les types de zones (champs), appelez le fichier schema.xml sous "http://localhost:8983/solr/tech­pro­ducts/schema" auf. Tech­pro­ducts a déjà défini des types de champs. Une ligne de commande dans le fichier XML décrit plus en détail les pro­prié­tés d’un champ à l’aide d’attributs. Selon la do­cu­men­ta­tion, Apache Solr autorise les attributs suivants pour un champ :

  • field name (ne peut pas être vide. Comporte le nom du champ.)
  • type (saisir ici un type de champ valable. Ne peut pas être vide.)
  • indexed (désigne « entré dans l’index ». Si la valeur est « true », vous pouvez re­cher­cher le champ ou le trier.)
  • stored (indique si un champ est en­re­gis­tré, si la valeur est « true », le champ peut être appelé.)
  • mul­ti­Va­lued (si un champ contient plusieurs valeurs pour un document, saisir ici la valeur « true ».)
  • default (saisissez ici une valeur par défaut qui apparaît si aucune valeur n’a été définie pour un nouveau document.)
  • com­pres­sed (rarement, puisqu’il ne s’applique qu’aux champs com­pres­sibles gzip, définis par défaut à « false ». Doit être réglé sur « true » pour com­pres­ser.)
  • omitNorms (réglé sur « true » par défaut. Sau­ve­garde les normes d’un champ et économise ainsi de la mémoire.)
  • ter­mOff­sets (nécessite plus d’espace disque. En­re­gistre les vecteurs ainsi que les in­for­ma­tions Offset, c’est-à-dire les sup­plé­ments d’adresse mémoire.)
  • term­Po­si­tions (nécessite plus d’espace mémoire car il stocke la position des termes avec le vecteur.)
  • term­Vec­tors (par défaut défini sur « false », stocke les termes vec­to­riels si « true ».)

Vous saisissez les pro­prié­tés de champ di­rec­te­ment dans le fichier xml du schéma ou vous utilisez une commande dans le terminal. Voici à quoi ressemble un type de champ simple dans le fichier Schema-xml :

<fields>
<field name="name" type="text_general" indexed="true" multivalued=”false” stored="true" />
</fields>

Vous pouvez également utiliser à nouveau le terminal d’entrée. Il vous suffit de saisir une commande Curl, de définir les pro­prié­tés des champs et de l’envoyer via l’interface de schéma en spé­ci­fiant l’adresse du fichier :

curl -X POST -H ‘Content-type:application/json’ --data-binary ‘{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}’ http://localhost:8983/solr/techproducts/schema
  1. Après avoir ajusté le schéma, c’est au tour de la con­fi­gu­ra­tion Solr. Vous l’utilisez pour définir les pa­ra­mètres de recherche. Ce sont là des éléments im­por­tants :
    • Pa­ra­mètres du cache de requête
    • Ges­tion­naire de requêtes (aussi : Request-Handler)
    • Em­pla­ce­ment du ré­per­toire de données
    • Composant de recherche

Les pa­ra­mètres du cache de requête per­met­tent trois types de mise en cache : LRUCache, LFUCache et FastL­RU­Cache. LRUCache utilise une carte de hachage liée, FastL­RU­Cache collecte des données sur une carte de hachage si­mul­ta­née. Cette carte de hachage traite les demandes si­mul­ta­né­ment. De cette façon, le serveur de recherche produit des réponses plus ra­pi­de­ment si de nom­breuses requêtes de recherche arrivent en parallèle. Le FastL­RU­Cache lit les données plus ra­pi­de­ment que le LRUCache et les insère plus lentement.

Remarque

Une HashMap attribue des valeurs à une clef. La clef est unique, il n’y a qu’une seule valeur par clef. Une telle clef cor­res­pond donc à n’importe quel objet. Ceci est utilisé pour calculer la valeur de hachage (Hash). C’est pra­ti­que­ment l’« adresse », c’est-à-dire la position exacte dans l’index. Vous pouvez l’utiliser pour re­cher­cher des valeurs clés dans une table.

Le ges­tion­naire de requêtes traite les requêtes. Il lit le protocole HTTP, recherche dans l’index et affiche les réponses. La con­fi­gu­ra­tion de l’exemple de Tech­pro­ducts inclut le ges­tion­naire par défaut pour Solr. Vous pouvez trouver les com­po­sants de recherche sous forme de liste dans le ges­tion­naire de requêtes. Ces éléments ef­fec­tuent la recherche. Par défaut, le ges­tion­naire contient les com­po­sants de recherche suivants :

  • query (requête)
  • facet (facettage)
  • mlt (More Like This)
  • highlight (meilleur)
  • stats (sta­tis­tiques)
  • debug (cor­rec­tion bug)
  • expand (étendre la recherche)

Pour le composant de recherche More Like This (mlt), par exemple, entrez cette commande :

<searchComponent name="mlt" class="org.apache.solr.handler.component.MoreLikeThisComponent" />

More Like This trouve des documents dont le contenu et la structure sont si­mi­laires. Il existe en tant que classe au sein de Lucene. La requête trouve le contenu pour les visiteurs de votre site Internet en comparant la chaîne de ca­rac­tères et les champs indexés.

Pour con­fi­gu­rer la liste, ouvrez d’abord le ges­tion­naire de requêtes :

<requestHandler name="standard" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="echoParams">explicit</str>
<!--
<int name="rows">10</int>
<str name="fl">*</str>
<str name="version">2.1</str>
-->
</lst>
</requestHandler>

Ajoutez les com­po­sants que vous avez définis vous-même à la liste dans le ges­tion­naire de requêtes ou modifiez les com­po­sants de recherche existants. Ces com­po­sants prennent en charge la recherche lorsqu’un visiteur du site Internet saisit ul­té­rieu­re­ment une requête de recherche sur votre domaine. La commande suivante insère un composant auto-construit avant les com­po­sants standard :

<arr name="first-components">
<str>NameOfTheOwnComponent</str>
</arr>

Insérer le composant après les com­po­sants standard :

<arr name="last-components">
<str>NameOfTheOwnComponent</str>
</arr>

Comment renommer des com­po­sants existants :

<arr name="components">
<str>facet</str>
<str>NameOfTheOwnComponent</str>
</arr>

Le ré­per­toire de données par défaut se trouve dans le ré­per­toire d’instance noyau « ins­tan­ceDi »  sous le nom « /data ». Si vous voulez utiliser un autre ré­per­toire, changez l’em­pla­ce­ment en utilisant solr­con­fig.xml. Pour ce faire, entrez un chemin fixe ou liez le nom du ré­per­toire au noyau (SolrCore) ou au ré­per­toire d’instance (ins­tan­ce­Dir). Pour lier au noyau, entrez :

<dataDir>/solr/data/$(solr.core.name)</dataDir>

Tutoriel Solr partie 3 : cons­truire un cluster Solr Cloud

Apache Solr fournit une démo de Cloud qui explique comment con­fi­gu­rer un cluster de Cloud. Bien sûr, vous pouvez également vous-même par­ti­ci­per à travers l’exemple en même temps.

  1. Tout d’abord, lancez l’interface en ligne de commande. Pour démarrer Solr en mode Cloud, entrez les in­for­ma­tions suivantes dans l’outil :
bin/solr -e cloud

La démo commence

  1. Spécifier combien de serveurs (ici : nodes) doivent être connectés via la Cloud. Le nombre peut être compris entre [1] et [4] (dans l’exemple le nombre est [2]). La démo fonc­tionne sur une machine, mais utilise un port différent pour chaque serveur, que vous spécifiez ensuite. (La démo spécifie les numéros de port)
Welcome to the SolrCloud example!
This interactive session will help you launch a SolrCloud cluster on your local workstation.
To begin, how many Solr nodes would you like to run in your local cluster? (specify 1-4 nodes) [2]
Please enter the port for node1 [8983]
Please enter the port for node2 [7574]
solr start –cloud -s example/cloud/node1/solr -p 8983
solr start –cloud -s example/cloud/node2/solr -p 7574

Une fois que vous avez alloué tous les ports, le script commence à se déplacer et vous montre les commandes pour démarrer le serveur (comme indiqué ci-dessus).

  1. Si tous les serveurs fonc­tion­nent, choi­sis­sez un nom pour votre collecte de données (les crochets indiquent des espaces réservés et n’ap­pa­rais­sent pas dans le code).
Please provide a name for your new collection: [Entrer_le_nom_ici]
  1. créer un fragment de cette col­lec­tion avec SPLIT­SHARD. Vous pourrez le diviser à nouveau en par­ti­tions plus tard. Cela ac­cé­lé­rera la recherche si plusieurs demandes sont reçues en même temps.
http://localhost:8983/solr/admin/collections?action=CREATESHARD&shard=[NouveauFragment]&collection[NomdelaCollection]

Après avoir créé des fragments avec SPLIT­SHARD, vous pouvez dis­tri­buer vos données à l’aide d’un routeur. Solr intègre le routeur com­po­si­teID (router.key=com­po­si­teId) par défaut.

Remarque

Un routeur détermine comment les données sont réparties entre les fragments et combien de bits la clé du routeur utilise. Par exemple, si vous utilisez 2 bits, le routeur indexe les données sur un quart de l’espace de stockage par fragment. Ceci permet d’éviter que de grands ensembles de données sur un seul fragment n’occupent toute la mémoire. Cela ra­len­ti­rait les re­cherches. Pour utiliser le routeur, spécifiez une valeur de routeur (par exemple, un nom d’uti­li­sa­teur comme MaxMuster1), le numéro de bit et l’iden­ti­fi­ca­tion du document sous cette forme : [No­mu­ti­li­sa­teur] / [Nombre-bits]! [Do­cu­men­tI­den­ti­fi­ca­tion] (Par exemple : MaxMuster1/2!1234)

Via l’interface, vous divisez le fragment en deux parties. Les deux par­ti­tions con­tien­nent la même copie des données ori­gi­nales. L’index les divise uni­que­ment en fonction des sous-domaines nou­vel­le­ment créés.

/admin/collections?action=SPLITSHARD&collection=[NomdelaCollection]&shard=[Numerofragment]
  1. Dans la dernière étape, vous spécifiez le nom de votre ré­per­toire de con­fi­gu­ra­tion. Les modèles sample-tech­pro­ducts-configs et _default sont dis­po­nibles. Ce dernier ne spécifie pas de schéma, vous pouvez donc toujours per­son­na­li­ser votre propre schéma. Utilisez la commande suivante pour dé­sac­ti­ver la fonction _default de l’interface Solr Cloud- :
curl http://localhost:8983/api/collections/[_Nom_de_la_Collection]/config -d ‘{"set-user-property": {"update.autoCreateFields":"false"}}’

Ceci empêche les champs de créer eux-mêmes des schémas in­com­pa­tibles avec le reste des fichiers, étant donné le contenu initial. Puisque vous avez besoin de la méthode HTTP POST pour ce paramètre, vous ne pouvez pas sim­ple­ment utiliser la ligne d’adresse du na­vi­ga­teur. localhost:8983 re­pré­sente le premier serveur. Si vous avez choisi un numéro de port différent, vous devez l’y insérer. [_Nom_de_la_Col­lec­tion] doit être remplacé avec le nom que vous avez choisi.

Vous avez main­te­nant configuré le Solr CLoud. Pour vérifier si votre nouvelle col­lec­tion s’affiche cor­rec­te­ment, in­ter­ro­gez à nouveau le statut :

bin/solr status

Vous pouvez obtenir un aperçu plus détaillé de la dis­tri­bu­tion de vos fragments via l’interface uti­li­sa­teur Admin. L’adresse se compose du nom de votre serveur avec le numéro de port et la connexion au Solr Cloud comme suit : "http://ser­ver­name:port­num­mer/solr/#/~cloud"

Extension d’Apache Solr avec des plugins

Apache Solr a déjà quelques ex­ten­sions. Ce sont les fameux ges­tion­naires. Nous avons déjà introduit le ges­tion­naire de requêtes. Lucene (et donc Solr) supporte également certains scripts natifs pratiques comme la classe Solr Analyzer et la classe Si­mi­la­rity. Les plugins peuvent être intégrés dans Solr via un fichier JAR. Si vous cons­trui­sez vos propres plugins et in­te­ra­gis­sez avec les in­ter­faces Lucene, vous devez ajouter les fichiers lucene-*.jars de votre bi­blio­thèque (solr/lib/) au chemin de classe avec lequel vous collectez votre code source du plugin.

Cette méthode fonc­tionne si vous n’utilisez qu’un seul noyau. Utilisez le Solr Cloud pour créer une bi­blio­thèque partagée pour les fichiers JAR. Pour ce faire, créez un ré­per­toire avec l’attribut « sharedLib » dans le fichier solr.xml de votre servlet. Il s’agit d’une méthode simple pour charger des plugins sur des noyaux in­di­vi­duels :

Si vous avez construit votre propre noyau, créez un ré­per­toire pour la bi­blio­thèque avec la commande « mkdir » (sous Windows : « md ») dans ce for­mu­laire :

mkdir solr/[exemple]/solr/CollectionA/lib

Fa­mi­lia­ri­sez-vous avec Solr et essayez l’une des démos fournies, utilisez plutôt « exemple/solr/lib ». Dans les deux cas, vous êtes main­te­nant dans le ré­per­toire de la bi­blio­thèque de votre ré­per­toire d’instance. C’est ici que vous stockez vos fichiers JAR de plugin.

Vous pouvez également utiliser l’ancienne méthode des versions an­té­rieures de Solr si, par exemple, vous ne réus­sis­sez pas avec la première variante de votre conteneur de servlet.

  • Pour ce faire, dé­com­pres­sez le fichier solr.war.
  • Ensuite, ajoutez le fichier JAR avec vos propres classes dans le ré­per­toire WEB-INF/lib-. Vous pouvez trouver le ré­per­toire via l’ap­pli­ca­tion web sur ce chemin : server/solr-webapp/webapp/WEB-INF/lib.
  • Com­pres­sez à nouveau le fichier WAR modifié.
  • Utilisez votre solr.war per­son­na­lisé.

Si vous ajoutez une option « dir » à la bi­blio­thèque, elle ajoutera tous les fichiers du ré­per­toire respectif (en anglais : directory) dans le Classpath. Avec « regex= » vous excluez les fichiers qui ne cor­res­pon­dent pas aux valeurs par défaut de « regex ».

<lib dir="${solr.install.dir:../../../}/contrib/../lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../..}/dist/" regexe="plugin_name-\d.*\.jar" />

Si vous cons­trui­sez vous-même un script de plugin, Clojure : le dialecte de Lisp, est entre autres re­com­mandé pour le Java Runtime. Ce langage de pro­gram­ma­tion supporte le dé­ve­lop­pe­ment de pro­grammes in­te­rac­tifs. D’autres langues intègrent leurs pro­prié­tés natives. Clojure le met à dis­po­si­tion via la bi­blio­thèque. Cette méthode de travail est bien adaptée à l’uti­li­sa­tion du servlet Solr.

Le langage de pro­gram­ma­tion et de script Groovy supporte le typage dynamique et statique sur la Java Virutal Machine. Le langage est basé sur Ruby et Python et est compilé en Java byte code. Ensuite, vous pouvez l’exécuter dans un script. Groovy est livré avec certaines fonc­tion­na­li­tés qui étendent les capacités de Java. Par exemple, Groovy intègre un modèle simple avec lequel vous pouvez créer du code en SQL ou HTML. De plus, la Syntaxe Groovy prête à l’emploi fournit quelques ex­pres­sions communes ou champs de données pour les listes. Si vous traitez JSON ou XML pour votre serveur de recherche Solr, Groovy aide à garder la syntaxe propre et com­pré­hen­sible.

Solr vs. Elas­tic­search

Lorsqu’il s’agit de moteurs de recherche open source, Solr et Elas­tic­search sont toujours à la pointe des tests et des enquêtes. Et les deux serveurs de recherche sont basés sur la bi­blio­thèque Apache Java Lucene. Lucene est évi­dem­ment une base solide. La bi­blio­thèque indexe les in­for­ma­tions de manière flexible et fournit ra­pi­de­ment des réponses à des requêtes de recherche complexes. Sur cette base, les deux moteurs de recherche fonc­tion­nent de manière con­cluante. Chacun des projets est soutenu par une com­mu­nauté active.

L’équipe de dé­ve­lop­pe­ment autour d’Elas­tic­search travaille avec GitHub, tandis que Solr est rattaché à la Fondation Apache. En com­pa­rai­son, le projet Apache peut s’appuyer sur une longue ex­pé­rience et un his­to­rique développé. Et la com­mu­nauté active a documenté tous les chan­ge­ments, fonc­tion­na­li­tés et bugs depuis 2007. La do­cu­men­ta­tion d’Elas­tic­search est loin d’être aussi complète, ce qui peut être critiqué. Cependant, Elas­tic­search n’est pas né­ces­sai­re­ment en retard par rapport à Apache Solr en termes de facilité d’uti­li­sa­tion.

Avec Elas­tic­search vous cons­trui­sez votre bi­blio­thèque en quelques étapes. Pour des fonctions sup­plé­men­taires, vous avez besoin de plugins premium. Cela vous permet de gérer les pa­ra­mètres de sécurité, de sur­veil­ler le serveur de recherche ou d’analyser les mesures. Le serveur de recherche rassemble également une famille de produits bien coor­don­née autour de lui. Dans la rubrique Elastic-Stack et X-Pack vous obtenez gra­tui­te­ment quelques fonctions de base. Les forfaits premium ne sont dis­po­nibles qu’avec un abon­ne­ment mensuel - avec une licence par nœud. Solr, d’autre part, est toujours gratuit, y compris les ex­ten­sions comme Tika et Zookeeper.

Les deux moteurs de recherche diffèrent le plus dans leur orien­ta­tion. Solr et Elas­tic­search peuvent être utilisés aussi bien pour de petits ensembles de données que pour de grands ensembles, qui sont réparties sur plusieurs en­vi­ron­ne­ments. Mais Solr se concentre sur la recherche de texte. Le concept d’Elas­tic­search, d’autre part, combine recherche et analyse. Les métriques et les logs sont traités par le servlet depuis le début. Elas­tic­search traite fa­ci­le­ment les quantités de données cor­res­pon­dantes. Parce que le serveur intègre dy­na­mi­que­ment les cœurs et les fragments, depuis la première version.

Elas­tic­search a déjà eu une longueur d’avance sur son con­cur­rent Solr, mais depuis quelques années, le Solr Cloud a également permis la clas­si­fi­ca­tion des facettes. Pour les données dy­na­miques, Elas­tic­search est encore lé­gè­re­ment en avance. En retour, le con­cur­rent marque des points con­cer­nant les données statiques. Il fournit des résultats ciblés pour la recherche en plein texte et calcule les données avec précision.

Les dif­fé­rents concepts de base sont également reflétés dans la mise en cache. Les deux four­nis­seurs offrent la mise en cache des requêtes par principe. Si une requête utilise des variables boo­léennes complexes, les deux stockent les éléments d’index appelés dans des segments. Ceux-ci peuvent fusionner en segments plus grands. Cependant, si un seul segment change, Apache Solr doit invalider tout le cache global et le recharger. Elas­tic­search limite ce processus au sous-segment affecté. Cela permet d’éco­no­mi­ser de l’espace disque et du temps.

Si vous tra­vail­lez ré­gu­liè­re­ment avec XML, HTTP et Ruby, vous vous ha­bi­tue­rez également à Solr sans aucun problème. JSON, d’autre part, a été ajouté plus tard via une interface. C’est pourquoi le langage et le servlet ne s’accordent pas encore par­fai­te­ment. Elas­tic­search d’autre part com­mu­nique na­ti­ve­ment via JSON. Le serveur de recherche intègre d’autres langages comme Python, Java, .NET, Ruby et PHP avec une interface similaire à REST.

Remarque

Apaches Solr Elastics Elas­tic­search sont deux puissants serveurs de recherche que nous pouvons re­com­man­der presque sans réserves. Si vous appréciez plus d’analyse de données et exploitez un site Web dynamique, Elas­tic­search est alors un bon choix. Solr, d’autre part, vous sera plus utile si vous avez besoin d’une recherche précise en plein texte pour votre domaine. Avec des variables complexes et des filtres per­son­na­li­sables, vous pouvez adapter votre moteur de recherche vertical exac­te­ment à vos besoins.

  Solr Elas­tic­search
Type Serveur de recherché open source gratuit Serveur de recherche open source gratuit avec des versions pro­prié­taires (gratuit et par abon­ne­ment)
Langues sup­por­tées Native : Java, XML, HTTP API : JSON, PHP, Ruby, Groovy et Clojure Native : JSON API : Java, .NET, Python, Ruby et PHP
Bases de données Bi­blio­thèques Java, NoSQL, avec Ontologie et Taxonomie, en par­ti­cu­lier Lucene Bi­blio­thèques Java, NoSQL, en par­ti­cu­lier Lucene et Hadoop
Clas­si­fi­ca­tion des nœuds et des fragments Plutôt statique Les nœuds avec Solr Cloud et les fragments avec SPLIT­SHARD peuvent être ajoutés ma­nuel­le­ment. À partir de Solr7 : sca­la­bi­lité au­to­ma­tique via l’interface Contrôle des fragments via un al­go­rithme d’élection Node Discovery avec Zookeeper-API Dynamique Ajoute des nœuds et des fragments via l’outil interne, moins de contrôle sur Leader. Node Discovery avec Zen-Tool intrégré.
Cache Global Cache (s’applique à tous les sous-segments d’un segment) Cache segmenté
Recherche plein texte De nom­breuses fonctions contenues dans le code source, offre aussi des fonctions de Lucene Analyseur syn­taxique de requêtes Demandes d’uti­li­sa­tions Recherche de si­mi­li­tude Vé­ri­fi­ca­tion or­tho­gra­phique dans dif­fé­rentes langues Com­pa­tible avec de nombreux Rich Text Format (RTF) Ac­cen­tua­tion LA recherche est prin­ci­pa­le­ment basée sur les fonctions de Lucene L’interface pour les sug­ges­tions de recherche affine le masque de recherche pour les uti­li­sa­teurs finaux, mais est moins per­son­na­li­sable. Vé­ri­fi­ca­tion or­tho­gra­phique, Matching via API Ac­cen­tua­tion moins per­son­na­li­sable
Aller au menu principal