Solr : tout sur le moteur de recherche d’Apache

Solr (prononcé Solar) est un sous-projet open source basé sur la bibliothèque de recherche et d’indexation 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 populaires pour l’intégration de moteurs de recherche verticaux. Les avantages de Solr comprennent un large éventail de fonctions (y compris, par exemple, la classification à facettes des résultats de recherche) et l’indexation accélérée. Il fonctionne également sur des conteneurs serveurs tels qu’Apaches Tomcat. Nous allons d’abord nous attarder sur les fonctionnalités d’Apache Solr, puis expliquer dans un tutoriel Solr ce qu’il faut bien considérer lors de la première utilisation 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 concepteur de logiciels Doug Cutting en 1997. Il l’a d’abord proposé via le service d’hébergement de fichiers SourceForge. En 1999, l’Apache Software Foundation a lancé le projet Jakarta pour soutenir et promouvoir le développement 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 principaux d’Apache et fonctionne 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 Elasticsearch 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éveloppement. Lorsque Solr a été mis à la disposition du public dans le cadre d’un projet distinct en 2007, il a rapidement attiré l’attention de la communauté : en 2010, la communauté Apache a intégré la servlet dans le projet Lucene. Ce développement conjoint garantit une bonne compatibilité. Le package est complété par Solr Cloud et l’analyseur syntaxique Solr Tika.

Définition

Apache Solr est une application serveur indépendante de recherche pour les projets Web basés sur Java. Le projet open source est basé sur la bibliothèque Java Lucene. Solr intègre automatiquement les documents en temps réel et forme des clusters dynamiques. Solr est compatible avec PHP, Python, XML et JSON. Le servlet possède une interface utilisateur Web et les commandes sont échangées en HTTP. Solr permet aux utilisateurs d’effectuer des recherches différenciées plein texte pour les documents Rich Text. Il est particulièrement adapté aux moteurs de recherche verticaux sur les pages Web statiques. L’extension Solr Cloud permet d’ajouter des éléments supplémentaires et une extension de la classification des fragments.

Introduction à Solr : explications des termes de base

Apache Solr est intégré dans Lucene sous la forme d’un servlet. Puisqu’il complète la bibliothèque logicielle Lucene, nous allons vous expliquer brièvement son fonctionnement. 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 expliquons dans la section suivante ce que cela signifie exactement.

Qu’est-ce qu’Apache Lucene ?

Le logiciel open source Lucene est une bibliothèque Java open source et gratuite que vous pouvez utiliser indépendamment de la plateforme. Lucene est connue comme une bibliothèque NoSQL puissante et évolutive. Le logiciel d’indexation est particulièrement adapté à l’utilisation des moteurs de recherche Internet, aussi bien pour les recherches sur l’ensemble du World Wide Web que pour les recherches à l’échelle du domaine et des requêtes locales.

Remarque

Lucene Core est une bibliothèque logicielle (ou plus simplement « bibliothèque », ou « bibliothèque de composants ») pour le langage de programmation Java. Les bibliothèques servent uniquement de collection ordonnée de sous-programmes. Les développeurs utilisent ces collections pour relier les programmes aux modules auxiliaires via une interface. Pendant l’exécution d’un programme, il peut accéder au composant requis dans la bibliothèque.

Comme la bibliothèque divise les documents en champs texte et les classe de manière logique, la recherche plein texte via Lucene fonctionne très précisément. Lucene trouve également des résultats pertinents pour des textes/documents similaires. Pour cette raison, la bibliothèque est également adaptée à l’évaluation 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étadonnées. Néanmoins, les fichiers doivent être lus à partir de la bibliothèque.

À cette fin, l’équipe de Lucene a développé le projet Apache Tika qui est maintenant indépendant. Apache Tika est un outil pratique pour l’analyse, la traduction ou l’indexation de textes. L’outil lit le texte et les métadonnées de plus de mille types de fichiers. Il extrait ensuite le texte et le met à disposition pour la suite du traitement. Tika se compose d’un analyseur et d’un détecteur. L’analyseur analyse les textes et structure le contenu dans une hiérarchie 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étadonnées

Les fonctions et les caractéristiques importantes de Lucene:

  • Indexation rapide, par étapes et par lots (jusqu’à 150 Go par heure selon vos propres spécifications)
  • Utilisation économique de la RAM
  • Tous écrits en Java, donc multiplateforme (les variantes des langages de programmation alternatifs sont Apache Lucy et Lucene.NET)
  • Interface pour plugins
  • Recherche de champs de texte (catégories 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 similarité/pertinence

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 rechercher dans ces champs. Ceci est considéré comme un outil particulièrement 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 modificateur. Les termes de recherche peuvent être des mots simples ou des groupes de mots. Vous pouvez les ajuster avec un modificateur ou combiner plusieurs termes avec des variables booléennes pour former une requête complexe. Dans le manuel d’utilisation Apache de la syntaxe du Query Parser vous trouverez les commandes exactes.

Lucene est également compatible avec la recherche approximative basée sur la distance de Levenshtein. Cette dernière saisit le nombre de changements de caractères (c’est-à-dire remplacer, insérer ou supprimer) pour passer d’une chaîne significative à une autre. Un exemple : « loupe » (remplacer p par k) pour « louke » a une distance de 1 car une seule opération de conversion était nécessaire.

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 ressembler au mot original. Si vous n’entrez pas de valeur, elle est automatiquement de 0.5. La commande correspondante 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 approximative est structurée de la même manière, avec laquelle vous recherchez des mots et déterminez également à quelle distance les termes de recherche peuvent se trouver dans le texte afin de rester pertinents. Par exemple, si vous recherchez l’expression « Alice au pays des merveilles », vous pouvez spécifier que les termes « Alice » et « Pays des merveilles » 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 recherches sur le World Wide Web et dans les domaines. Les moteurs de recherches qui couvrent un large éventail de pages sont connues sont le nom de moteur de recherche horizontal. Cela regroupe les plus grands fournisseurs comme Google, Bing et Yahoo, mais aussi DuckDuckGo et Startpage. Un moteur de recherche vertical, par contre, est limité soit à un domaine, soit à un sujet spécifique, soit à un groupe cible. Un moteur de recherche de domaine spécifique aide les visiteurs de votre site à trouver des offres et des textes de votre présence Web. Les portails de recommandation tels que TripAdvisor ou Yelp, mais aussi les sites de recherche d’emploi sont des exemples de moteurs de recherche thématique. Les moteurs de recherche spécifiques à un groupe cible sont destinés, par exemples, aux enfants et aux adolescents ou bien aux scientifiques qui recherchent des sources.

Grâce à des robots d’indexation ciblés (au lieu des robots d’indexation Web), les moteurs de recherche verticaux trouvent des résultats plus précis. Une bibliothèque comme Lucene, qui divise son index en classes en utilisant les méthodes de la taxonomie et les relie logiquement en utilisant l’ontologie, rend cette recherche exacte en plein texte possible. Les moteurs de recherche verticaux utilisent aussi des filtres thématiques appropriés qui limitent le nombre de résultats.

Remarque

L’ontologie et la taxonomie sont deux méthodes et principes qui en informatique sont importants pour un archivage correct. La taxonomie traite de la division des termes en classes. Ceci les divise en une hiérarchie qui est similaire à un diagramme en arborescence. 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 recherches rapides. Mais il y a certaines étapes essentielles que vous devez répéter fréquemment, mais elles ne sont pas automatiques. Après tout, la recherche verticale nécessite un index très ramifié. C’est là qu’Apache Solr intervient. Le serveur de recherche complète les fonctions de la bibliothèque. Et Solr peut être configuré rapidement et facilement 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 ? Fonctionnement du serveur de recherche

Maintenant que vous disposez d’informations de base sur la fondation de Lucene et le champ d’application de Solr, nous allons vous expliquer comment fonctionne le serveur de recherche, comment il étend Lucene, et comment vous pouvez travailler avec lui.

Solr : les éléments de base

Solr est écrit en Java, vous pouvez donc utiliser la plate-forme de servlet indépendamment. Les commandes sont généralement écrites en HTTP (Hypertext Transfer Protocol), pour les fichiers à enregistrer, utilisez XML (Extensible Markup Language). Apache Solr offre également aux développeurs Python et Ruby leur langage de programmation familier via une API (application programming interface). Pour ceux qui travaillent normalement avec JavaScript Object Notation (en abrégé : JSON), Apache Solr fournit ElasticSearch fournit l’environnement optimal. Cependant, Solr peut également travailler avec ce format via une API. Bien que le serveur de recherche soit basé sur Lucene et s’intègre parfaitement dans son architecture, Solr travaille également seul. Il est compatible avec les conteneurs serveur comme Apache Tomcat.

Indexation pour des résultats de recherche précis, en quelques fractions de seconde

Structurellement, le servlet est basé sur un fichier index inversé (terme anglais : inverted index). Solr utilise la bibliothè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’information. Dans la bibliothèque, l’index stocke le contenu. Il peut s’agir de mots ou de chiffres. Si un utilisateur recherche un certain contenu sur un site Web, la personne saisit habituellement un ou deux termes de recherche pertinents pour le sujet. Au lieu d’utiliser des robots d’exploration pour rechercher ces mots dans l’ensemble du site Web, Solr utilise alors la bibliothèque.

Cela indexe tous les mots-clés importants presque en temps réel et les lie aux documents du site Web dans lequel les mots recherchés se trouvent. La recherche parcourt simplement l’index pour trouver un terme. La liste des résultats affiche tous les documents qui contiennent ce mot au moins une fois selon l’index. Ce type de recherche correspond à 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 informations sur les pages du texte entier sur lesquelles 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 respectifs.

Pour que ce processus fonctionne correctement, il est théoriquement nécessaire d’entrer tous les mots-clefs et métadonnées (comme le nom de l’auteur ou l’année de publication) dans la bibliothèque chaque fois qu’un nouveau document est ajouté au portfolio du site. Cela rend le travail de Lucene dans le backend un peu fastidieux. Mais Solr peut automatiser de telles étapes.

Pertinence 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 booléennes et la troncature, 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 constituées de variables complexes. Il optimise ainsi la vitesse de recherche.

Si vous voulez garder les internautes sur votre site Web, vous devriez leur offrir une bonne expérience utilisateur. Il s’agit en particulier de proposer les offres adaptées. Par exemple, si vos visiteurs cherchent de l’information 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 alimentaires. 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 apparaître plus bas dans la liste.

Peu importe si les utilisateurs recherchent un terme spécifique ou s’ils devraient voir des suggestions de sujets intéressants avec des liens internes à la fin d’un article passionnant : dans les deux cas, la pertinence des résultats est primordiale. Solr utilise la mesure TF-IDF pour s’assurer que le chercheur ne voit que les résultats de recherche qui le concernent.

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 statistique numérique. Il compare la densité, la rareté ou l’utilisation 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 contiennent le terme. De cette façon, vous pouvez voir si un terme de recherche apparaît réellement plus fréquemment dans le contexte d’un document que dans l’ensemble des textes.

Solr : les fonctions les plus importantes

Apache Solr collecte et indexe les données en temps quasi réel, avec l’aide de Lucene Core. Les données représentent des documents. Dans la recherche comme dans l’indexation, 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 synchronisation, les registres de noms et la distribution des configurations. Ceci inclut, par exemple, un algorithme d’élection sur un anneau qui affecte un coordinateur (aussi : Leader) aux processus dans un système réparti. Le Trouble Shooter Zookeeper, qui a fait ses preuves, réenclenche également les processus en cas de perte de token et trouve les nœuds (ordinateurs dans le système) à l’aide de Node-Discovery. Toutes ces fonctions garantissent que votre projet reste toujours librement évolutif.

Cela signifie également que le moteur de recherche fonctionne même dans les conditions les plus difficiles. Comme nous l’avons mentionné précédemment, 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 fragmenter horizontalement vos ensembles de données, ceci est également appelé Sharding. Pour ce faire, vous divisez votre bibliothèque en fragments logiquement liés. Cela vous permet d’étendre votre bibliothèque au-delà de l’espace de stockage normalement disponible. Apache vous recommande également de télécharger plusieurs copies de votre bibliothèque sur différents serveurs. Cela augmente votre facteur de réplication. Si plusieurs requêtes arrivent en même temps, elles sont alors distribuées aux différents serveurs.

La recherche plein texte, que Lucene a déjà introduite, est étendue par Solr avec d’autres fonctions. Ces fonctions de recherche comprennent, entre autres :

  • Adaptation du terme également pour les groupes de mots : le système détecte les fautes d’orthographe dans l’entrée de recherche et fournit les résultats d’une alternative 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.
  • Regroupement de termes liés thématiquement.
  • Classification à facettes : le système classe chaque élément d’information en fonction de plusieurs dimensions. 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 classement chronologique. La recherche par facette permet à l’utilisateur d’utiliser plusieurs filtres et d’obtenir ainsi une liste individuelle de résultats.
  • Recherche par métacaractère (Wildcard) : un caractère représente un élément indéfini ou plusieurs éléments de ce type dans une chaîne de caractè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 remplacement (par exemple : Prof*). La liste des résultats inclut alors tous les termes contenant ce mot racine (par exemple : profession, professeur, professionnel, professer etc.). De cette façon, les utilisateurs reçoivent des résultats pour ce domaine. La pertinence nécessaire résulte de la délimitation du sujet de votre bibliothèque ou d’autres délimitations de recherche. Par exemple, si les utilisateurs recherchent « 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 différentes langues

De plus, le servlet peut intégrer plusieurs noyaux (Cores en anglais). Ces Cores sont constitués d’index de Lucene. Le noyau recueille toutes les informations dans une bibliothèque. Les fichiers de configuration et les schémas peuvent aussi y être trouvés. Ceci définit le comportement d’Apache Solr. Si vous souhaitez utiliser des extensions, intégrez simplement vos propres scripts ou plugins issus des contributions communautaires dans le fichier de configuration.

Avantages

Inconvénients

Extension de Lucene avec des fonctions pratiques

Indexation automatique en temps réel

Recherche plein texte

Classification à facettes et regroupement de mots-clefs

Contrôle total sur les fragments

Facilite la scalabilité horizontale des serveurs de recherche

Facile à intégrer dans votre propre site Web

Moins adapté pour les données et objets dynamiques

Ajout de noyaux et fractionnement des fragments possible uniquement manuellement. Le cache global peut coûter du temps et de l’espace par rapport au cache segmenté.

Tutoriel : télécharger et configurer Apache Solr

La configuration système requise pour Solr n’est pas très élevée. Tout ce dont vous avez besoin est un Java SE Runtime Environment à partir de la version 1.8.0. Les développeurs ont testé le servlet sous Linux/Unix, macOS et Windows dans différentes versions. Téléchargez simplement le paquet d’installation approprié et extraire le fichier.zip (paquet Windows) ou le fichier.tgz (paquet Unix, Linux et OSX) dans un répertoire de votre choix.

Tutorial Solr : étape 1, télécharger 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èvement sur les fonctions Solr. Voir « Resources » pour les tutoriels et la documentation. Sous « Communauty », les adeptes de Solr vous aideront à répondre à vos questions. Dans cette section, vous pouvez également contribuer vos propres builds.
  2. Cliquez sur le bouton de téléchargement pour l’installation. Ceci vous amènera à la page de téléchargement avec une liste de téléchargements de miroirs. La version Solr actuelle (7.3, à partir de mai 2018) d’un fournisseur certifié devrait figurer en tête de liste. Vous pouvez également choisir entre les liens HTTP et le téléchargement FTP. Si vous cliquez sur un lien, vous accédez à la page miroir du fournisseur correspondant
  1. Dans l’image ci-dessus, vous pouvez voir les différents packs de téléchargement disponibles, et dans ce cas pour Solr version 7.3.
  • solr-7.3.0-src.tgz est le paquet pour les développeurs. Il contient le code source, donc vous pouvez travailler dessus en dehors de la communauté GitHub.
  • solr-7.3.0.tgz est la version pour les utilisateurs Mac et Linux ou Unix.
  • solr-7.3.0.zip contient le paquet Solr compatible Windows.
  • Dans le dossier changes/. vous trouverez la documentation de la version correspondante.

Une fois que vous avez sélectionné la version optimale pour vos besoins par un clic de souris, une fenêtre de téléchargement apparaît. Sauvegardez le fichier. Une fois le téléchargement terminé, cliquez sur le bouton de téléchargement dans votre navigateur ou ouvrez votre dossier de téléchargement.

  1. Décompressez le fichier zip ou le fichier.tgz. Si vous voulez d’abord vous familiariser avec Solr, sélectionnez un répertoire au choix. Sauvegardez les fichiers décompressés ici. Si vous savez déjà dans quelle mesure vous souhaitez utiliser Solr, sélectionnez le serveur prévu à cet effet. Ou créez un environnement Solr Cloud en grappe si vous souhaitez l’étendre. (Plus d’informations sur le Cloud dans le chapitre suivant)
Conseil

En théorie, une seule bibliothèque Lucene peut indexer environ 2,14 milliards de documents. Dans la pratique, cependant, vous n’atteindrez généralement pas ce nombre avant que le nombre de documents n’affecte la performance. Avec un nombre de documents correspondant é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 travaillons 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 fonctionnent 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épertoire 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 fonctionne maintenant 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 fonctionne, familiarisez-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)
  • Gestionnaire d’importation de données (Commande : dih)
  • Sans schéma (Commande : schemaless)
  • Exemple détaillé avec Kitchen-Sink (Commande : techproducts)

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étacaractère [exemple] représente l’un des mots-clés spécifiés ci-dessus) :

bin/solr -e [exemple]
  1. Solr fonctionnera donc dans le mode approprié. Si vous voulez être sûr, ouvrez le Statusreport :
bin/solr status
Found 1 Solr nodes:
Solr process xxxxx running on port 8983
  1. Les exemples contiennent des réglages de base préconfiguré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 rechercher 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 utilisateur basée sur le Web. Si vous avez démarré le programme avec succès, vous trouverez l’application Web Solr-Admin dans votre navigateur 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 disposition un outil de commande simple. Avec ce qu’on appelle le Post-Tool, vous pouvez télécharger du contenu sur votre serveur. Il peut s’agir de documents pour l’index ou de configurations de schéma. L’outil accède à votre collection à cette fin. Par conséquent, vous devez toujours spécifier le noyau ou la collection avant de l’utiliser.

Dans l’exemple de code suivant, nous donnons d’abord la forme générale. Remplacez <collection> par le nom de votre noyau/collection. « -c » est la commande « create ». Ceci crée un noyau ou une collection. Derrière, vous définissez des options supplémentaires ou exécutez des commandes. Par exemple, vous pouvez utiliser « -p » pour sélectionner un port et « *.xml » ou « *.csv » pour télécharger tous les fichiers au format approprié dans votre collection (lignes deux et trois). La commande « -d » supprime les documents de votre collection (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 connaissez maintenant certaines des commandes de base de Solr. L’exemple de la version démo de Kitchen-Sink vous montrera exactement comment configurer Apache Solr.

  1. Démarrer Solr avec la version démo. Pour la démo Kitchen-Sink utilisez la commande techproducts.  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 collection et indexe quelques fichiers échantillons 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 maintenant 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’introduire vous-même certains fichiers dans l’index. L’interface utilisateur Solr-Admin rend cela très simple. Appelez le serveur Solr dans votre navigateur. Dans notre démo Techproducts, Solr spécifie déjà le serveur et le port. En conséquence, entrez l’adresse suivante dans votre navigateur : "http:://localhost:8983/solr/".

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

Vous y contrôlez le dossier exemple/exempledocs. Ce dossier contient des fichiers d’exemple et le fichier post.jar. Sélectionnez 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 informations 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 configurez le serveur de recherche Apache Solr, vous devez configurer directement les fichiers de configuration et le schéma. Ceux-ci sont donnés dans les exemples de démonstration. Si vous travaillez sur un nouveau serveur, vous devez déterminer 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 subdivision 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 formulaire année-mois-jour-temps). Utilisez le schéma pour déterminer les types de champs que l’index reconnaît ultérieurement et comment il les affecte. Si vous ne le faites pas, les documents introduits dans le système spécifient les types de champs. Ceci est utile dans la phase de test parce que vous commencez simplement à 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 :

  • DateRangeField (Périodes indexées et dates jusqu’à la milliseconde)
  • ExternalFileField (extrait les valeurs d’un dossier externe)
  • TextField (Zone générale pour la saisie de texte)
  • BinaryField (indexe deux valeurs séparément, mais les affiche à l’utilisateur final comme une seule valeur.)
  • CurrencyField indexe deux valeurs séparément, mais les affiche à l’utilisateur final comme une seule valeur. CurrencyField enregistre une valeur numérique (par exemple, 4,50) et une devise (par exemple, €) dans chaque zone. L’utilisateur 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 paramé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/techproducts/schema" auf. Techproducts a déjà défini des types de champs. Une ligne de commande dans le fichier XML décrit plus en détail les propriétés d’un champ à l’aide d’attributs. Selon la documentation, 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 rechercher le champ ou le trier.)
  • stored (indique si un champ est enregistré, si la valeur est « true », le champ peut être appelé.)
  • multiValued (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.)
  • compressed (rarement, puisqu’il ne s’applique qu’aux champs compressibles gzip, définis par défaut à « false ». Doit être réglé sur « true » pour compresser.)
  • omitNorms (réglé sur « true » par défaut. Sauvegarde les normes d’un champ et économise ainsi de la mémoire.)
  • termOffsets (nécessite plus d’espace disque. Enregistre les vecteurs ainsi que les informations Offset, c’est-à-dire les suppléments d’adresse mémoire.)
  • termPositions (nécessite plus d’espace mémoire car il stocke la position des termes avec le vecteur.)
  • termVectors (par défaut défini sur « false », stocke les termes vectoriels si « true ».)

Vous saisissez les propriétés de champ directement 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 propriétés des champs et de l’envoyer via l’interface de schéma en spécifiant 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 configuration Solr. Vous l’utilisez pour définir les paramètres de recherche. Ce sont là des éléments importants :
    • Paramètres du cache de requête
    • Gestionnaire de requêtes (aussi : Request-Handler)
    • Emplacement du répertoire de données
    • Composant de recherche

Les paramètres du cache de requête permettent trois types de mise en cache : LRUCache, LFUCache et FastLRUCache. LRUCache utilise une carte de hachage liée, FastLRUCache collecte des données sur une carte de hachage simultanée. Cette carte de hachage traite les demandes simultanément. De cette façon, le serveur de recherche produit des réponses plus rapidement si de nombreuses requêtes de recherche arrivent en parallèle. Le FastLRUCache lit les données plus rapidement 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 correspond donc à n’importe quel objet. Ceci est utilisé pour calculer la valeur de hachage (Hash). C’est pratiquement l’« adresse », c’est-à-dire la position exacte dans l’index. Vous pouvez l’utiliser pour rechercher des valeurs clés dans une table.

Le gestionnaire de requêtes traite les requêtes. Il lit le protocole HTTP, recherche dans l’index et affiche les réponses. La configuration de l’exemple de Techproducts inclut le gestionnaire par défaut pour Solr. Vous pouvez trouver les composants de recherche sous forme de liste dans le gestionnaire de requêtes. Ces éléments effectuent la recherche. Par défaut, le gestionnaire contient les composants de recherche suivants :

  • query (requête)
  • facet (facettage)
  • mlt (More Like This)
  • highlight (meilleur)
  • stats (statistiques)
  • debug (correction 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 similaires. 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 caractères et les champs indexés.

Pour configurer la liste, ouvrez d’abord le gestionnaire 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 composants que vous avez définis vous-même à la liste dans le gestionnaire de requêtes ou modifiez les composants de recherche existants. Ces composants prennent en charge la recherche lorsqu’un visiteur du site Internet saisit ultérieurement une requête de recherche sur votre domaine. La commande suivante insère un composant auto-construit avant les composants standard :

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

Insérer le composant après les composants standard :

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

Comment renommer des composants existants :

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

Le répertoire de données par défaut se trouve dans le répertoire d’instance noyau « instanceDi »  sous le nom « /data ». Si vous voulez utiliser un autre répertoire, changez l’emplacement en utilisant solrconfig.xml. Pour ce faire, entrez un chemin fixe ou liez le nom du répertoire au noyau (SolrCore) ou au répertoire d’instance (instanceDir). Pour lier au noyau, entrez :

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

Tutoriel Solr partie 3 : construire un cluster Solr Cloud

Apache Solr fournit une démo de Cloud qui explique comment configurer un cluster de Cloud. Bien sûr, vous pouvez également vous-même participer à 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 informations 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 fonctionne 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 fonctionnent, choisissez un nom pour votre collecte de données (les crochets indiquent des espaces réservés et n’apparaissent pas dans le code).
Please provide a name for your new collection: [Entrer_le_nom_ici]
  1. créer un fragment de cette collection avec SPLITSHARD. Vous pourrez le diviser à nouveau en partitions plus tard. Cela accé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 SPLITSHARD, vous pouvez distribuer vos données à l’aide d’un routeur. Solr intègre le routeur compositeID (router.key=compositeId) 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 ralentirait les recherches. Pour utiliser le routeur, spécifiez une valeur de routeur (par exemple, un nom d’utilisateur comme MaxMuster1), le numéro de bit et l’identification du document sous cette forme : [Nomutilisateur] / [Nombre-bits]! [DocumentIdentification] (Par exemple : MaxMuster1/2!1234)

Via l’interface, vous divisez le fragment en deux parties. Les deux partitions contiennent la même copie des données originales. L’index les divise uniquement en fonction des sous-domaines nouvellement créés.

/admin/collections?action=SPLITSHARD&collection=[NomdelaCollection]&shard=[Numerofragment]
  1. Dans la dernière étape, vous spécifiez le nom de votre répertoire de configuration. Les modèles sample-techproducts-configs et _default sont disponibles. Ce dernier ne spécifie pas de schéma, vous pouvez donc toujours personnaliser votre propre schéma. Utilisez la commande suivante pour désactiver 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 incompatibles 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 simplement utiliser la ligne d’adresse du navigateur. localhost:8983 représente le premier serveur. Si vous avez choisi un numéro de port différent, vous devez l’y insérer. [_Nom_de_la_Collection] doit être remplacé avec le nom que vous avez choisi.

Vous avez maintenant configuré le Solr CLoud. Pour vérifier si votre nouvelle collection s’affiche correctement, interrogez à nouveau le statut :

bin/solr status

Vous pouvez obtenir un aperçu plus détaillé de la distribution de vos fragments via l’interface utilisateur 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://servername:portnummer/solr/#/~cloud"

Extension d’Apache Solr avec des plugins

Apache Solr a déjà quelques extensions. Ce sont les fameux gestionnaires. Nous avons déjà introduit le gestionnaire de requêtes. Lucene (et donc Solr) supporte également certains scripts natifs pratiques comme la classe Solr Analyzer et la classe Similarity. Les plugins peuvent être intégrés dans Solr via un fichier JAR. Si vous construisez vos propres plugins et interagissez avec les interfaces Lucene, vous devez ajouter les fichiers lucene-*.jars de votre bibliothèque (solr/lib/) au chemin de classe avec lequel vous collectez votre code source du plugin.

Cette méthode fonctionne si vous n’utilisez qu’un seul noyau. Utilisez le Solr Cloud pour créer une bibliothèque partagée pour les fichiers JAR. Pour ce faire, créez un répertoire 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 individuels :

Si vous avez construit votre propre noyau, créez un répertoire pour la bibliothèque avec la commande « mkdir » (sous Windows : « md ») dans ce formulaire :

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

Familiarisez-vous avec Solr et essayez l’une des démos fournies, utilisez plutôt « exemple/solr/lib ». Dans les deux cas, vous êtes maintenant dans le répertoire de la bibliothèque de votre répertoire d’instance. C’est ici que vous stockez vos fichiers JAR de plugin.

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

  • Pour ce faire, décompressez le fichier solr.war.
  • Ensuite, ajoutez le fichier JAR avec vos propres classes dans le répertoire WEB-INF/lib-. Vous pouvez trouver le répertoire via l’application web sur ce chemin : server/solr-webapp/webapp/WEB-INF/lib.
  • Compressez à nouveau le fichier WAR modifié.
  • Utilisez votre solr.war personnalisé.

Si vous ajoutez une option « dir » à la bibliothèque, elle ajoutera tous les fichiers du répertoire respectif (en anglais : directory) dans le Classpath. Avec « regex= » vous excluez les fichiers qui ne correspondent 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 construisez vous-même un script de plugin, Clojure : le dialecte de Lisp, est entre autres recommandé pour le Java Runtime. Ce langage de programmation supporte le développement de programmes interactifs. D’autres langues intègrent leurs propriétés natives. Clojure le met à disposition via la bibliothèque. Cette méthode de travail est bien adaptée à l’utilisation du servlet Solr.

Le langage de programmation 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 fonctionnalité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 expressions 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 compréhensible.

Solr vs. Elasticsearch

Lorsqu’il s’agit de moteurs de recherche open source, Solr et Elasticsearch sont toujours à la pointe des tests et des enquêtes. Et les deux serveurs de recherche sont basés sur la bibliothèque Apache Java Lucene. Lucene est évidemment une base solide. La bibliothèque indexe les informations de manière flexible et fournit rapidement des réponses à des requêtes de recherche complexes. Sur cette base, les deux moteurs de recherche fonctionnent de manière concluante. Chacun des projets est soutenu par une communauté active.

L’équipe de développement autour d’Elasticsearch travaille avec GitHub, tandis que Solr est rattaché à la Fondation Apache. En comparaison, le projet Apache peut s’appuyer sur une longue expérience et un historique développé. Et la communauté active a documenté tous les changements, fonctionnalités et bugs depuis 2007. La documentation d’Elasticsearch est loin d’être aussi complète, ce qui peut être critiqué. Cependant, Elasticsearch n’est pas nécessairement en retard par rapport à Apache Solr en termes de facilité d’utilisation.

Avec Elasticsearch vous construisez votre bibliothèque en quelques étapes. Pour des fonctions supplémentaires, vous avez besoin de plugins premium. Cela vous permet de gérer les paramètres de sécurité, de surveiller le serveur de recherche ou d’analyser les mesures. Le serveur de recherche rassemble également une famille de produits bien coordonnée autour de lui. Dans la rubrique Elastic-Stack et X-Pack vous obtenez gratuitement quelques fonctions de base. Les forfaits premium ne sont disponibles qu’avec un abonnement mensuel - avec une licence par nœud. Solr, d’autre part, est toujours gratuit, y compris les extensions comme Tika et Zookeeper.

Les deux moteurs de recherche diffèrent le plus dans leur orientation. Solr et Elasticsearch peuvent être utilisés aussi bien pour de petits ensembles de données que pour de grands ensembles, qui sont réparties sur plusieurs environnements. Mais Solr se concentre sur la recherche de texte. Le concept d’Elasticsearch, d’autre part, combine recherche et analyse. Les métriques et les logs sont traités par le servlet depuis le début. Elasticsearch traite facilement les quantités de données correspondantes. Parce que le serveur intègre dynamiquement les cœurs et les fragments, depuis la première version.

Elasticsearch a déjà eu une longueur d’avance sur son concurrent Solr, mais depuis quelques années, le Solr Cloud a également permis la classification des facettes. Pour les données dynamiques, Elasticsearch est encore légèrement en avance. En retour, le concurrent marque des points concernant 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 différents concepts de base sont également reflétés dans la mise en cache. Les deux fournisseurs offrent la mise en cache des requêtes par principe. Si une requête utilise des variables boolé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. Elasticsearch limite ce processus au sous-segment affecté. Cela permet d’économiser de l’espace disque et du temps.

Si vous travaillez régulièrement avec XML, HTTP et Ruby, vous vous habituerez é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 parfaitement. Elasticsearch d’autre part communique nativement 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 Elasticsearch sont deux puissants serveurs de recherche que nous pouvons recommander presque sans réserves. Si vous appréciez plus d’analyse de données et exploitez un site Web dynamique, Elasticsearch 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 personnalisables, vous pouvez adapter votre moteur de recherche vertical exactement à vos besoins.

Solr

Elasticsearch

Type

Serveur de recherché open source gratuit

Serveur de recherche open source gratuit avec des versions propriétaires (gratuit et par abonnement)

Langues supporté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

Bibliothèques Java, NoSQL, avec Ontologie et Taxonomie, en particulier Lucene

Bibliothèques Java, NoSQL, en particulier Lucene et Hadoop

Classification des nœuds et des fragments

Plutôt statique

Les nœuds avec Solr Cloud et les fragments avec SPLITSHARD peuvent être ajoutés manuellement.

À partir de Solr7 : scalabilité automatique via l’interface

Contrôle des fragments via un algorithme 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 nombreuses fonctions contenues dans le code source, offre aussi des fonctions de Lucene

Analyseur syntaxique de requêtes

Demandes d’utilisations

Recherche de similitude

Vérification orthographique dans différentes langues

Compatible avec de nombreux Rich Text Format (RTF)

Accentuation

LA recherche est principalement basée sur les fonctions de Lucene

L’interface pour les suggestions de recherche affine le masque de recherche pour les utilisateurs finaux, mais est moins personnalisable.

Vérification orthographique, Matching via API

Accentuation moins personnalisable