Exemple Apache Solr Hello World
Apache Solr est un serveur de moteur de recherche et d'analyse en temps réel basé sur une API REST Open Source d'Apache Software Foundation. La fonctionnalité de recherche principale est conçue à l'aide du framework Apache Lucene et ajoutée avec des fonctionnalités supplémentaires et utiles. Il est écrit en langage Java.
SOLR signifie Searching On Lucene w / Replication. Ses principales fonctionnalités sont l’indexation et le repérage. CommeElasticSearch, il s'agit également d'un magasin de données NoSQL basé sur des documents.
Note
C'est le site officiel:http://lucene.apache.org/solr/. La dernière version de Solr est la 6.4.2, sortie le 7 mars 2017.
Caractéristiques d'Apache Solr: -
-
Un open-source
-
Prend en charge la recherche en texte intégral et la fonction de navigation à facettes
-
Appuyez sur la mise en évidence
-
Résultats pertinents
-
Utilise Apache Lucene Inverted Index pour indexer ses documents.
-
Prend en charge les recommandations et les suggestions de sorts
-
Prend en charge l'auto-complétion
-
Recherche géo-spatiale Suppots
-
Prend en charge l'API basée sur REST (JSON sur HTTP)
-
Prend en charge la recherche et l'analyse en temps réel
-
La dernière version de Solr (version 5.x ou ultérieure) prend en charge la technologie distribuée et Colud.
-
Tel qu'il est écrit, il prend en charge la fonctionnalité multiplateforme.
-
Sécurité intégrée pour l'authentification et l'autorisation
-
Prend en charge le streaming
Avantages ou avantages d'Apache Solr: -
-
Un open-source
-
Il a une interface administrative très utile.
-
Léger avec l'API REST
-
C'est un moteur de recherche très rapide, simple, puissant et flexible
-
Contrairement à ElasticSearch, il prend en charge non seulement le format JSON, mais également d'autres formats utiles: XML, PHP, Ruby, Python, XSLT, Velocity et les formats de sortie binaire Java personnalisés sur HTTP.
-
Hautement disponible. Facile et hautement évolutif. Moteur de recherche robuste, tolérant aux pannes et fiable.
-
Magasin de données sans schéma. Cependant, si nécessaire, nous pouvons créer un schéma pour prendre en charge nos données.
-
Performances de recherche rapides grâce à l'index inversé Apache Lucene.
-
Prend en charge les données structurées et UN-Structured
-
Prend en charge l'architecture distribuée, de partage, de réplication, de clustering et multi-nœuds
-
Prend en charge les opérations en masse
-
Facilement extensible avec de nouveaux plugins
-
Prend en charge la mise en cache des données
-
Utile pour les environnements BigData
-
Contrairement à ElasticSearch, il prend en charge l'algorithme MapReduce
Inconvénients ou limites d'Apache Solr: -
-
Pas utile en tant que magasin de données principal. Seulement utile comme magasin de données secondaire.
-
Pas un magasin de données compatible ACID
-
Ne prend pas en charge les transactions et les transactions distribuées
-
Ne prend PAS en charge les jointures et les requêtes complexes
-
N'est PAS utile de travailler avec des données normalisées
Clients populaires qui utilisent Apache Solr: -
-
CNET, Krugle, M TV
-
Flipkart.com, Sourceforge.net, guardian.co.uk
-
eBay, creuser
-
Instagram
-
AT&T interactif
-
Goldman Sachs
-
AOL Music, AOL Travel, AOL Pages Jaunes
-
Disney
-
Apple Inc.
-
Plus de clients se réfèrent à celink
Les distributions Hadoop populaires telles que Cloudera, Hortonworks et MapR utilisent Apache Solr en interne pour prendre en charge la fonctionnalité de recherche.
Note
Comme nous le savons, Apache Solr est écrit en Java. Donc, nous devrions avoir Java / JRE dans notre chemin système pour l'utiliser. Veuillez installer et configurer correctement l'environnement Java. Apache Solr 5.x nécessite Java 7 ou version ultérieure. Apache 6.x nécessite Java 8 ou version ultérieure.
Nous pouvons utiliser Apache Solr de deux manières:
-
Serveur Apache Solr autonome
-
Serveur Solr Apached Cloud et distribué
Dans ce tutoriel, nous allons utiliser lesApache Solr Server v6.4.2autonomes pour illustrer nos exemples.
Note
Dans les versions initiales d'Apache, Solr ne prend pas en charge la fonctionnalité Colud. À partir de la version Apache Solr 4.0, il prend en charge le Cloud en utilisant le composant SolrCloud.
1. Installer Apache Solr localement
Veuillez suivre ces étapes pour configurer le serveur Apache Solr autonome localement dans des environnements Windows, Linux (comme Ubuntu) ou Mac OS.
Note
Pour télécharger la dernière Apache Solr, reportez-vous à ceofficial
download link
1.1 Windows Environment
-
Téléchargez la dernière version d'Apache Solr
-
Extraire le fichier zip sur le système de fichiers local
-
Définir les variables d'environnement
PATH=${SOLR_HOME}\bin
1.2 Linux or Mac Environment
-
Téléchargez la dernière version d'Apache Solr
-
Extraire le fichier zip
$ tar -xvf solr-6.4.2.tgz
Définir les variables d'environnement
SupposonsSOLR_HOME=/home/rambabu/solr-6.4.2
export PATH=${SOLR_HOME}\bin
Nous avons maintenant installé Apache Solr avec succès.
2. Start/Stop Apache Solr Locally
Certaines commandes pour manipuler Apache Solr Server.
2.1 Check Status of Apache Solr
Avant de démarrer le serveur Solr, veuillez exécuter la commande «status» suivante pour connaître l'état.
cd solr-6.4.2 $ ./solr status No Solr nodes are running.
2.2 Start Apache Solr
$ ./solr start Archiving 1 old GC log files to /home/rambabu/solr-6.4.2/server/logs/archived Archiving 1 console log files to /home/rambabu/solr-6.4.2/server/logs/archived Rotating solr logs, keeping a max of 9 generations Waiting up to 180 seconds to see Solr running on port 8983 [\] Started Solr server on port 8983 (pid=24563). Happy searching!
Si nous observons les journaux de commande de démarrage ci-dessus, nous pouvons comprendre que le serveur Apache Solr est démarré au numéro de port par défaut: 8983. Maintenant, exécutez à nouveau la commande «status» pour connaître l'état du serveur maintenant.
$ ./solr status Found 1 Solr nodes: Solr process 24563 running on port 8983 { "solr_home":"/home/rambabu/solr-6.4.2/server/solr", "version":"6.4.2 34a975ca3d4bd7fa121340e5bcbf165929e0542f - ishan - 2017-03-01 23:30:23", "startTime":"2017-03-22T15:11:30.804Z", "uptime":"0 days, 0 hours, 5 minutes, 10 seconds", "memory":"35.3 MB (%7.2) of 490.7 MB"}
Démarrez Apache Solr avec un numéro de port différent
$ ./solr start –p 9000
2.3 Stop Apache Solr
Utilisez la commande «stop» pour arrêter le serveur
$ ./solr stop Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 24563 to stop gracefully.
2.4 Restart Apache Solr
$ ./solr restart Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 19442 to stop gracefully. Archiving 1 old GC log files to /home/rambabu/solr-6.4.2/server/logs/archived Archiving 1 console log files to /home/rambabu/solr-6.4.2/server/logs/archived Rotating solr logs, keeping a max of 9 generations Waiting up to 180 seconds to see Solr running on port 8983 [\] Started Solr server on port 8983 (pid=19691). Happy searching!
Note
Comme je vais utiliser le système d'exploitation Linux (Ubuntu) dans ce tutoriel, j'ai utilisé des commandes telles que./solr start
. Si vous utilisez le système d'exploitation Windows, veuillez utiliser jsutsolr start
.
3. Terminologie Apache Solr
Nous discuterons de quelques terminologies importantes d'ElasticSearch:Solr Core
,Solr Core
,Indexing
,Document
,Field
etc.
3.1 What is a Solr Instance?
Dans Apache Solr, une instance Solr est une instance Solr exécutée dans la JVM. En mode autonome, Solr ne contient qu'une seule instance alors que, comme en mode Cloud, il contient une ou plusieurs instances.
3.2 What is a Solr Core?
Dans Apache Solr, un Solr Core est également appelé simplement «Core». Un noyau est un index des textes et des champs disponibles dans tous les documents. Une instance Solr peut contenir un ou plusieurs Solr Cores.
En d'autres termes, un Solr Core = une instance d'Apache Lucene Index + Solr Configuration (solr.xml, solrconfig.xml etc.)
PS: - Apache Solr utilise les fichiers de configuration importants suivants:
-
solr.xml
-
solrconfig.xml
-
core.properties
Si vous souhaitez expérimenter Apache Solr en tant qu'architecture basée sur Schama, veuillez consulter la documentation Apache Solr.
3.3 What is Indexing?
Dans Apache Lucene ou Solr, l’indexation est une technique d’ajout du contenu d’un document à l’index Solr afin de pouvoir les rechercher facilement. Apache Solr utilise la technique d’indexation inversée Apache Lucene pour indexer ses documents. C’est pourquoi Solr propose une fonction de recherche très rapide.
3.4 What is a Document?
Dans Apache Solr, un document est un groupe de champs et leurs valeurs. Les documents sont l'unité de base des données que nous stockons dans Apache Cores. Un noyau peut contenir un ou plusieurs documents.
3.5 What is a Field?
Dans Apache Solr, un champ est une donnée réelle stockée dans un document. C'est une paire clé / valeur. La clé indique le nom du champ et la valeur contient ces données de champ. Un document peut contenir un ou plusieurs champs. Apache Solr utilise ces données de champ pour indexer le contenu Docuemnt.
Points importants à retenir:
-
Apache Solr Standalone Architecture ne possède qu'une seule instance Solr alors que Solr Cloud Architecture a plus d'instances.
-
Apache Solr utilise la technologie SolrCloud pour prendre en charge l'architecture cloud.
-
Chaque instance Solr peut avoir zéro ou plusieurs cœurs.
-
Chaque noyau peut contenir zéro ou plusieurs documents.
-
Chaque document peut contenir zéro ou plusieurs champs.
-
Chaque fichier contient une paire clé: valeur. La clé est le nom du fichier et la valeur est les données du champ.
Note
Comme ce tutoriel est destiné uniquement au mode autonome Apache Solr, nous ne discutons pas de la terminologie SolrCloud.
4. Console d'administration Apache Solr
Contrairement à ElasticSearch, Apache Solr dispose d'une interface Web ou d'une console d'administration. C'est l'un des avantages d'Apache Solr. Il est utile pour les administrateurs et programmeurs de Solr d'afficher les détails de configuration de Solr, d'exécuter des requêtes et d'analyser les champs de document afin d'affiner une configuration de Solr, etc.
Une fois que nous avons démarré Apache Solr, nous pouvons accéder à sa console d'administration en utilisant:http://localhost:8983/solr/
Comme indiqué dans le diagramme ci-dessus, Apache Solr n'a au départ aucun cœur, c'est pourquoi il affiche «Aucun cœur disponible» dans le panneau de gauche.
Nous pouvons utiliser cette console d'administration:
-
Créer, mettre à jour, supprimer (décharger) et afficher les cœurs
-
Créer, mettre à jour, supprimer et afficher des documents
-
Configurations Apache Solr
-
Informations de journalisation
-
Suivi des informations
5. Créer «helloworld» Apache Solr Core
Nous pouvons effectuer des opérations Apache Solr comme CRUD un Apache Core ou CRUD a Doucment ou Field utilise les méthodes suivantes:
-
Apache Solr Comamnds
-
Console d'administration
-
API REST
-
Commande CURL
Voyons d'abord comment créer des commandes Core uses et les afficher dans la console d'administration.
Avant d'exécuter ces commandes, veuillez démarrer Apache Solr en utilisant la commande «solr start». Nous pouvons utiliser la commande «create» pour créer un Apache Core comme indiqué ci-dessous:
Créer une syntaxe de commande: -
$ ./solr create -c
Ici, la commande «create» est utilisée pour créer le noyau et l'option «-c» spécifie le nom du noyau Solr.
Exemple de commande de création: -
$ ./solr create -c helloworld Copying configuration to new core instance directory: /home/rambabu/solr-6.4.2/server/solr/helloworld Creating new core 'helloworld' using command: http://localhost:8983/solr/admin/cores?action=CREATE&name=helloworld&instanceDir=helloworld { "responseHeader":{ "status":0, "QTime":1636}, "core":"helloworld"}
Si nous observons la sortie ci-dessus, nous pouvons comprendre que le noyau «helloworld» est créé avec succès. Même nous pouvons voir l'URL de l'API REST suivante dans cette sortie pour créer le noyau «helloworld».
http://localhost:8983/solr/admin/cores?action=CREATE&name=helloworld&instanceDir=helloworld
Ici, le paramètre de requête «action» spécifie l'opération «CREATE» et le nom définit le nom du noyau et instanceDir spécifie un nom de répertoire. Nous pouvons utiliser à la fois name et instanceDir identiques ou différents.
Après avoir exécuté cette commande, si nous actualisons la console d'administration, nous ne voyons pas "Aucun cœur disponible" dans le panneau de gauche. Vous pouvez maintenant voir l'option «Core Selector». Si nous cliquons dessus, il affichera le noyau «helloworld» dans la liste déroulante. Si vous sélectionnez ce noyau, il affiche toutes les informations sur le panneau latéral gauche. Il affiche également une option différente juste en dessous dans cette liste déroulante:
-
Vue d'ensemble
-
Les documents
-
Requete
Il crée également un dossier «helloworld» sous${SOLR_HOME}/server/solr/
comme indiqué ci-dessous:
Pour créer un Apache Core avec le nom de dossier requis
Exemple de commande de création: -
$ ./solr create -c helloworld -d myhellowolrd
Ici, notre noyau "helloworld" crée avec le nom de dossier "myhellowolrd"
6. Add/Update/Import Documents to Core
Comme nous venons de créer «helloworld» Core, il est vide. Ne contient pas de documents ou de données. Nous pouvons utiliser l'option «Documents» de la console d'administration Apache Solr pour ajouter / mettre à jour / importer des documents dans ce noyau.
Nous pouvons ajouter des documents en utilisant le contenu directement dans différents formats tels que JSON, XML, binaire, etc. ou en utilisant l'option FileUpload pour télécharger des fichiers directement en tant que documents.
Ajouter des fichiers dans «helloworld» Core
-
Accéder à la console d'administration Solr:
http://localhost:8983/solr/
-
Cliquez sur l'option "Core Selector" et sélectionnez "helloworld" core dans la liste déroulante.
-
Cliquez sur l'option "Documents"
-
Observez «Request-Handler», il montre «/ update» qui signifie que nous allons mettre à jour Core avec des documents
-
Dans Document (s), cliquez sur l'option «Choisir un fichier»
-
Sélectionnez "films.json" dans $ {SOLR_HOME} / example / films /
-
Cliquez sur le bouton «Soumettre le document».
Il crée un document avec les données disponibles dans le fichierfilms.json
. Nous pouvons faire la même chose en utilisant xml, csv etc. des dossiers.
7. Interroger des documents depuis Core
Nous pouvons utiliser l'API REST ou la console d'administration pour interroger des documents à partir d'un Apache Core.
Explorons-le maintenant à l'aide de la console d'administration Apache.
-
Accéder à la console d'administration Solr:
http://localhost:8983/solr/
-
Cliquez sur l'option "Core Selector" et sélectionnez "helloworld" core dans la liste déroulante.
-
Cliquez sur "Requête" dans le panneau de gauche
-
Observez "Request-Handler", il montre "/ select" qui signifie que nous allons sélectionner ou récupérer des documents à partir du Core.
-
Cliquez sur le bouton "Exécuter la requête" dans le panneau de droite
-
Il récupère tous les documents disponibles à partir du noyau «helloworld»
Vous pouvez accéder aux mêmes résultats à l'aide de l'appel d'API REST suivant. Vous verrez les mêmes résultats sur le navigateur ou le client REST.
http://localhost:8983/solr/helloworld/select?indent=on&q=*:*&wt=json
Ici, «q» représente «les paramètres de requête pour filtrer les données. Il utilise la syntaxe «q = Fieldname: Value». Ici, «q =:» signifie tout interroger. «Wt» signifie «type d'écrivain» ou «type de réponse».
Maintenant, interrogeons avec quelques options de filtrage. Vous pouvez accéder à cette API REST à partir du navigateur Web ou de tout client REST comme POSTMAN, Sense, Fidler, etc.
http://localhost:8983/solr/helloworld/select?indent=on&q=directed_by:"Gary Lennon"&wt=json
Ici, nous avons récupéré toutes les données du document de films, qui correspondent à cette requête dirigée_by = ”Gary Lennon”. Si vous maîtrisez SQL, nous pouvons convertir cette requête en la commande SQL SELECT suivante.
SELECT * FROM FILMS WHERE directed_by="Gary Lennon"
Vous pouvez accéder aux mêmes résultats à l'aide de l'appel d'API REST suivant. Vous verrez les mêmes résultats sur le navigateur ou le client REST.
http://localhost:8983/solr/helloworld/select?fl=genre&indent=on&q=directed_by:"Shane Acker"&wt=json
Ici, «fl» signifie Liste des champs dans la réponse ou dans les résultats. Nous sommes intéressés à ne récupérer que le champ «genre». Convertissez-le en requête SQL.
SELECT genre FROM FILMS WHERE directed_by="Shane Acker"
De la même manière, essayez de tester différentes requêtes SELECT pour récupérer ou filtrer des données.
8. Supprimer les documents Apache Solr
Ici, nous allons supprimer un document qui correspond à la condition Direct_by = "Zack Snyder". Nous utilisons le même «Request-Handler» = «/ update», ce qui signifie que nous allons mettre à jour le Core. Nous utilisons l'option «» qui signifie que nous allons supprimer ou supprimer un document qui correspond à la condition donnée.
Ici, nous utilisons la commande curl pour effectuer l'opération DELETE afin de couvrir également l'exemple de commande CURL. Vous pouvez expérimenter cet exemple avec d'autres options comme le client REST, etc.
$ curl http://localhost:8983/solr/helloworld/update/?commit=true -H "Content-Type: application/xml" -d "" directed_by:'Zack Snyder' 0 563
9. Supprimer Apache Solr Core
Nous pouvons mettre à jour Apache Solr Core en utilisant «Request-Handler» = «/ update» et en effectuant des opérations d'ajout / de mise à jour / de suppression sur les documents. Nous pouvons utiliser l'API REST sur le navigateur, la console d'administration, le client REST ou la commande CURL pour ce faire. Si nécessaire, nous pouvons supprimer ou supprimer des cœurs en utilisant l'option «Décharger» de la console d'administration Apache Solr.
Veuillez suivre ces étapes pour décharger un Core
-
Accéder à la console d'administration Solr:
http://localhost:8983/solr/
-
Cliquez sur l'option "Core Selector" et sélectionnez "helloworld" core dans la liste déroulante.
-
Cliquez sur le bouton «Décharger» dans le panneau latéral droit.
-
Il supprime ou décharge le noyau sélectionné d'Apache Solr.
-
Il ne supprime pas le dossier Core du chemin «serveur / solr».
10. Pourquoi Apache Solr? Pourquoi pas Apache Lucene?
Comme nous le savons, Apache Lucene est l'API principale de base pour les deux moteurs de recherche populaires: Apache Solr et ElasticSearch. Cependant, Apache Lucene est une API Java simple et utile uniquement pour les applications Java.
Comme ElasticSearch, Apache Solr est un wrapper au-dessus de l'API Apache Lucene. Il a exposé cette API Java en tant qu'API REST, comme indiqué dans le diagramme ci-dessous. Nous pouvons maintenant utiliser cette API de recherche dans toutes les applications. Et aussi l'API REST est très flexible et légère.
11. Apache Solr vs ElasticSearch vs bases de données relationnelles
Comme nous le savons, Apache Solr et ElasticSearch utilisent Apache Lucene pour implémenter leurs fonctionnalités principales. Presque tous les deux prennent en charge les mêmes fonctionnalités. Quelques similitudes notables:
-
Les deux utilisent Apache Lucene sous le capot.
-
Les deux prennent en charge l'API de base REST.
-
Les deux sont des moteurs de recherche Open Source.
-
Tous deux prennent en charge les technologies BigData et Cloud.
-
Les deux prennent en charge la gestion du cluster.
-
Les deux sont utiles comme magasins de données secondaires.
-
Les deux utilisent l'indexation inversée d'Apache Lucene pour prendre en charge la fonction de recherche rapide.
Ils présentent les différences suivantes.
-
Apache Solr utilise un composant externe: SolrCloud pour prendre en charge l'architecture cloud et distribuée alors qu'ElasticSearch a intégré et prend en charge une véritable architecture cloud et distribuée.
-
Apache Solr utilise Apache Zookeepter pour la gestion des clusters alors qu'ElasticSearch utilise Zen Discovery pour cela.
-
ElasticSearch ne prend en charge que l'API REST basée sur JSNO alors qu'Apache Solr prend en charge de nombreux autres formats tels que JSON, XML, Doc, CSV, Binary, etc.
-
Apache Solr a un support de sécurité intégré là où ElasticSearch n'a pas.
-
ElasticSearch prend en charge uniquement le magasin de données sans schéma, alors qu'Apache Solr prend en charge à la fois basé sur schéma et moins de schéma.
Différences entre Apache Solr et les bases de données relationnelles
-
Les bases de données relationnelles ne prennent en charge que les données structurées où, comme Apache Solr, les données structurées et non structurées.
-
Les bases de données relationnelles sont bonnes pour les données normalisées alors qu'Apache Solr est bonne pour les données dé-normalisées.
-
Les bases de données relationnelles ont besoin de Schema pour stocker ses données alors qu'Apache Solr prend en charge à la fois les bases de données et les schémas.
-
Les bases de données relationnelles prennent en charge les requêtes complexes et les jointures là où Apache Solr ne les a pas prises en charge.
-
Nous pouvons utiliser des bases de données relationnelles comme magasin de données principal où Apache Solr comme magasin de données secondaire.