Apache Solr Hello World Beispiel

Apache Solr Hallo Welt Beispiel

apache solr logo

Apache Solr ist ein Open-Source-REST-API-basierter Enterprise Real-Time Search- und Analytics Engine-Server von Apache Software Foundation. Die zentrale Suchfunktion wurde mit Apache Lucene Framework erstellt und mit einigen zusätzlichen und nützlichen Funktionen ergänzt. Es ist in Java-Sprache geschrieben.

SOLR steht für Searching On Lucene mit Replikation. Die Hauptfunktionen sind Indizieren und Serchen. WieElasticSearch ist es auch ein dokumentbasierter NoSQL-Datenspeicher.

Note
Offizielle Website:http://lucene.apache.org/solr/. Die neueste Version von Solr ist 6.4.2, die am 7. März 2017 veröffentlicht wurde.

Apache Solr Funktionen: -

  • Ein Open-Source

  • Unterstützt die Volltextsuche und die facettierte Navigationsfunktion

  • Drücken Sie die Hervorhebung

  • Relevante Ergebnisse

  • Verwendet Apache Lucene Inverted Index, um die Dokumente zu indizieren.

  • Unterstützt Empfehlungen und Rechtschreibvorschläge

  • Unterstützt die automatische Vervollständigung

  • Unterstützt die georäumliche Suche

  • Unterstützt REST-basierte API (JSON über HTTP)

  • Unterstützt Echtzeitsuche und -analyse

  • Die neueste Version von Solr (Version 5.x oder höher) unterstützt die Distributed- und Colud-Technologie.

  • Wie bereits geschrieben, unterstützt es die plattformübergreifende Funktion.

  • Integrierte Sicherheit für Authentifizierung und Autorisierung

  • Unterstützt Streaming

Vorteile oder Nutzen von Apache Solr: -

  • Ein Open-Source

  • Es hat eine sehr nützliche Verwaltungsoberfläche.

  • Leichtgewicht mit REST API

  • Es ist eine sehr schnelle, einfache, leistungsstarke und flexible Suchmaschine

  • Im Gegensatz zu ElasticSearch unterstützt es nicht nur das JSON-Format, sondern auch andere nützliche Formate: XML, PHP, Ruby, Python, XSLT, Velocity und benutzerdefinierte binäre Java-Ausgabeformate über HTTP.

  • Sehr gut verfügbar. Einfach und hoch skalierbar. Robuste, fehlertolerante und zuverlässige Suchmaschine.

  • Schemafreier Datenspeicher. Bei Bedarf können wir jedoch ein Schema erstellen, um unsere Daten zu unterstützen.

  • Schnelle Suchleistung durch Apache Lucene Inverted Index.

  • Unterstützt sowohl strukturierte als auch UN-strukturierte Daten

  • Unterstützt verteilte Architektur, Sharding, Replikation, Clustering und Multi-Node-Architektur

  • Unterstützt Massenoperationen

  • Leicht erweiterbar mit neuen Plugins

  • Unterstützt das Zwischenspeichern von Daten

  • Nützlich für BigData-Umgebungen

  • Im Gegensatz zu ElasticSearch unterstützt es den MapReduce-Algorithmus

Nachteile oder Einschränkungen von Apache Solr: -

  • Nicht nützlich als primärer Datenspeicher. Nur als sekundärer Datenspeicher nützlich.

  • Kein ACID-kompatibler Datenspeicher

  • Unterstützt keine Transaktionen und verteilten Transaktionen

  • Unterstützt NICHT Joins und komplexe Abfragen

  • Ist NICHT nützlich, um mit normalisierten Daten zu arbeiten

Beliebte Kunden, die Apache Solr verwenden: -

  • CNET, Krugle, M TV

  • Flipkart.com, Sourceforge.net, guardian.co.uk

  • eBay, digg

  • Instagram

  • AT & T Interactive

  • Goldman Sachs

  • AOL Musik, AOL Reisen, AOL Gelbe Seiten

  • Disney

  • Apple Inc.

  • Weitere Clients beziehen sich auf dieselink

Beliebte Hadoop-Distributionen wie Cloudera, Hortonworks und MapR verwenden Apache Solr intern, um die Suchfunktionalität zu unterstützen.

Note
Wie wir wissen, ist Apache Solr in Java geschrieben. Wir sollten also Java / JRE in unserem Systempfad haben, um es zu verwenden. Bitte installieren und richten Sie Java Environment ordnungsgemäß ein. Apache Solr 5.x benötigt Java 7 oder höher. Apache 6.x benötigt Java 8 oder höher.

Wir können Apache Solr in zwei Varianten verwenden:

  • Standalone Apache Solr Server

  • Cloud und Distributed Apached Solr Server

In diesem Tutorial werden wir die StandaloneApache Solr Server v6.4.2 verwenden, um unsere Beispiele zu demonstrieren.

Note
In ersten Versionen von Apache unterstützt Solr die Colud-Funktion nicht. Ab Apache Solr 4.0 wird Cloud mithilfe der SolrCloud-Komponente unterstützt.

1. Installieren Sie Apache Solr lokal

Befolgen Sie diese Schritte, um Standalone Apache Solr Server lokal in Windows-, Linux-basierten (wie Ubuntu) oder Mac OS-Umgebungen einzurichten.

Note
Informationen zum Herunterladen des neuesten Apache Solr finden Sie unterofficial download link

1.1 Windows Environment

  • Laden Sie die neueste Version von Apache Solr herunter

  • Extrahieren Sie die Zip-Datei in das lokale Dateisystem

  • Umgebungsvariablen festlegen

PATH=${SOLR_HOME}\bin

1.2 Linux or Mac Environment

  • Laden Sie die neueste Version von Apache Solr herunter

  • Zip-Datei extrahieren

$ tar -xvf solr-6.4.2.tgz

Umgebungsvariablen festlegen

Nehmen wirSOLR_HOME=/home/rambabu/solr-6.4.2 an

export PATH=${SOLR_HOME}\bin

Jetzt haben wir Apache Solr erfolgreich installiert.

2. Start/Stop Apache Solr Locally

Einige Befehle zum Bearbeiten von Apache Solr Server.

2.1 Check Status of Apache Solr
Führen Sie vor dem Starten des Solr-Servers den folgenden Befehl "status" aus, um den Status zu ermitteln.

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!

Wenn wir die obigen Startbefehlsprotokolle beachten, können wir verstehen, dass der Apache Solr-Server unter der Standardportnummer 8983 gestartet wird. Führen Sie nun erneut den Befehl "status" aus, um den Serverstatus jetzt zu ermitteln.

$ ./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"}

Starten Sie Apache Solr mit einer anderen Portnummer

$ ./solr start –p 9000

2.3 Stop Apache Solr
Verwenden Sie den Befehl "stop", um den Server zu stoppen

$ ./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
Da ich in diesem Tutorial Linux (Ubuntu) verwenden werde, habe ich Befehle wie./solr start verwendet. Wenn Sie ein Windows-Betriebssystem verwenden, verwenden Sie bitte jsutsolr start.

3. Apache Solr Terminologie

Wir werden einige wichtige ElasticSearch-Terminologie diskutieren:Solr Core,Solr Core,Indexing,Document,Field usw.

3.1 What is a Solr Instance?
In Apache Solr ist eine Solr-Instanz eine Instanz, die in der JVM ausgeführt wird. Im Standalone-Modus enthält Solr nur eine Instanz, während es wie im Cloud-Modus eine oder mehrere Instanzen enthält.

3.2 What is a Solr Core?
In Apache Solr wird ein Solr-Kern auch einfach als „Kern“ bezeichnet. Ein Kern ist ein Index von Texten und Feldern, die in allen Dokumenten verfügbar sind. Eine Solr-Instanz kann einen oder mehrere Solr-Kerne enthalten.
Mit anderen Worten, ein Solr-Kern = eine Instanz von Apache Lucene Index + Solr-Konfiguration (solr.xml, solrconfig.xml usw.)

PS: - Apache Solr verwendet die folgenden wichtigen Konfigurationsdateien:

  • solr.xml

  • solrconfig.xml

  • core.properties

Wenn Sie Apache Solr als schama-basierte Architektur ausprobieren möchten, lesen Sie bitte die Dokumentation zu Apache Solr.

3.3 What is Indexing?
In Apache Lucene oder Solr ist die Indizierung eine Technik zum Hinzufügen des Dokumentinhalts zum Solr-Index, damit wir sie leicht durchsuchen können. Apache Solr verwendet die Apache Lucene Inverted Index-Technik, um die Dokumente zu indizieren. Aus diesem Grund bietet Solr eine sehr schnelle Suchfunktion.

3.4 What is a Document?
In Apache Solr ist ein Dokument eine Gruppe von Feldern und deren Werten. Dokumente sind die grundlegende Dateneinheit, die wir in Apache Cores speichern. Ein Kern kann ein oder mehrere Dokumente enthalten.

3.5 What is a Field?
In Apache Solr sind ein Feld tatsächliche Daten, die in einem Dokument gespeichert sind. Es ist ein Schlüssel-Wert-Paar. Der Schlüssel gibt an, dass der Feldname und der Wert diese Felddaten enthalten. Ein Dokument kann ein oder mehrere Felder enthalten. Apache Solr verwendet diese Felddaten, um den Dokumentinhalt zu indizieren.

Apache Solr Architecture

Wichtige Punkte, die Sie beachten sollten:

  • Apache Solr Standalone Architecture verfügt nur über eine Solr-Instanz, während Solr Cloud Architecture über mehr Instanzen verfügt.

  • Apache Solr verwendet die SolrCloud-Technologie zur Unterstützung der Cloud-Architektur.

  • Jede Solr-Instanz kann null oder mehr Kerne haben.

  • Jeder Kern kann null oder mehr Dokumente enthalten.

  • Jedes Dokument kann null oder mehr Felder enthalten.

  • Jede Datei enthält ein Schlüssel: Wert-Paar. Schlüssel ist der Name der Datei und Wert sind die Daten des Feldes.

Note
Da dieses Tutorial nur für den Apache Solr Standalone-Modus vorgesehen ist, wird die SolrCloud-Terminologie nicht behandelt.

4. Apache Solr Admin-Konsole

Im Gegensatz zu ElasticSearch verfügt Apache Solr über eine Webschnittstelle oder eine Admin-Konsole. Dies ist einer der Vorteile von Apache Solr. Für Solr-Administratoren und -Programmierer ist es hilfreich, Solr-Konfigurationsdetails anzuzeigen, Abfragen auszuführen und Dokumentfelder zu analysieren, um eine Solr-Konfiguration usw. zu optimieren.

Sobald wir Apache Solr gestartet haben, können wir mithttp://localhost:8983/solr/ auf die Admin-Konsole zugreifen

Apache Solr Admin Console

Wie im obigen Diagramm gezeigt, verfügt Apache Solr anfangs NICHT über Kerne. Aus diesem Grund wird auf der linken Seite "Keine Kerne verfügbar" angezeigt.

Wir können diese Admin-Konsole verwenden:

  • Erstellen, Aktualisieren, Löschen (Entladen) und Anzeigen von Kernen

  • Dokumente erstellen, aktualisieren, löschen und anzeigen

  • Apache Solr-Konfigurationen

  • Protokollierungsinformationen

  • Überwachungsinformationen

5. Erstellen Sie "helloworld" Apache Solr Core

Wir können Apache Solr-Operationen wie CRUD ein Apache Core oder CRUD ein Doucment oder Field auf folgende Arten ausführen:

  • Apache Solr Comamnds

  • Admin-Konsole

  • REST-API

  • CURL-Befehl

Lassen Sie uns zunächst erläutern, wie Core-Verwendungsbefehle erstellt und in der Admin-Konsole angezeigt werden.

Bevor Sie diese Befehle ausführen, starten Sie Apache Solr mit dem Befehl "solr start". Wir können den Befehl "create" verwenden, um einen Apache Core wie unten gezeigt zu erstellen:

Befehlssyntax erstellen: -

$ ./solr create -c 

Hier wird der Befehl "create" verwendet, um den Core zu erstellen, und die Option "-c" gibt den Solr-Core-Namen an.

Befehl erstellen Beispiel: -

$ ./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"}

Wenn wir die obige Ausgabe beobachten, können wir verstehen, dass der Kern „helloworld“ erfolgreich erstellt wurde. Sogar wir können die folgende REST-API-URL in dieser Ausgabe sehen, um den "helloworld" -Kern zu erstellen.

http://localhost:8983/solr/admin/cores?action=CREATE&name=helloworld&instanceDir=helloworld

Hier gibt der Abfrageparameter "action" die Operation "CREATE" an, und name definiert den Core-Namen und instanceDir gibt einen Verzeichnisnamen an. Wir können sowohl name als auch instanceDir gleich oder verschieden verwenden.

Wenn Sie nach Ausführung dieses Befehls die Admin-Konsole aktualisieren, wird auf der linken Seite nicht "Keine Kerne verfügbar" angezeigt. Jetzt können Sie die Option „Core Selector“ sehen. Wenn wir darauf klicken, wird im Dropdown-Feld der Kern „helloworld“ angezeigt. Wenn Sie diesen Kern auswählen, werden alle Informationen auf der linken Seite angezeigt. Es werden auch verschiedene Optionen direkt unten in diesem Dropdown-Feld angezeigt:

  • Überblick

  • Unterlagen

  • Abfrage

Außerdem wird unter${SOLR_HOME}/server/solr/ ein Ordner "helloworld" erstellt, wie unten gezeigt:

image

So erstellen Sie einen Apache Core mit dem erforderlichen Ordnernamen

Befehl erstellen Beispiel: -

$ ./solr create -c helloworld -d myhellowolrd

Hier erstellt unser "helloworld" -Kern mit dem Ordnernamen "myhellowolrd"

6. Add/Update/Import Documents to Core

Da wir gerade den "helloworld" -Kern erstellt haben, ist er leer. Enthält keine Dokumente oder Daten. Wir können die Option "Dokumente" der Apache Solr Admin Console verwenden, um Dokumente zu diesem Kern hinzuzufügen / zu aktualisieren / zu importieren.

Wir können Dokumente hinzufügen, indem wir Inhalte direkt in verschiedenen Formaten wie JSON, XML, Binär usw. verwenden oder die Option FileUpload verwenden, um Dateien direkt als Dokumente hochzuladen.

Fügen Sie Dateien zum "helloworld" -Kern hinzu

  • Zugriff auf Solr Admin Console:http://localhost:8983/solr/

  • Klicken Sie auf die Option "Core Selector" und wählen Sie im Dropdown-Feld "helloworld" -Kern aus.

  • Klicken Sie auf die Option "Dokumente"

  • Beachten Sie "Request-Handler", es zeigt "/ update", was bedeutet, dass wir Core mit Dokumenten aktualisieren werden

  • Klicken Sie unter Dokumente auf die Option „Datei auswählen“

  • Wählen Sie "films.json" aus $ {SOLR_HOME} / example / movies /

  • Klicken Sie auf die Schaltfläche "Dokument senden".

image

Es wird ein Dokument mit verfügbaren Daten in der Dateifilms.jsonerstellt. Wir können das gleiche mit XML, CSV usw. tun. Dateien.

7. Dokumente vom Core abfragen

Wir können entweder die REST-API oder die Admin-Konsole verwenden, um Dokumente von einem Apache Core abzufragen.

Lassen Sie es uns jetzt mit der Apache Admin Console erkunden.

  • Zugriff auf Solr Admin Console:http://localhost:8983/solr/

  • Klicken Sie auf die Option "Core Selector" und wählen Sie im Dropdown-Feld "helloworld" -Kern aus.

  • Klicken Sie im linken Bereich auf "Abfrage"

  • Beachten Sie "Request-Handler", es zeigt "/ select", was bedeutet, dass wir Dokumente aus Core auswählen oder abrufen werden.

  • Klicken Sie im rechten Bereich auf die Schaltfläche "Abfrage ausführen"

  • Es ruft alle verfügbaren Dokumente aus dem Kern von "helloworld" ab

image

Sie können mit dem folgenden REST-API-Aufruf auf dieselben Ergebnisse zugreifen. Sie sehen die gleichen Ergebnisse auch im Browser oder im REST-Client.

http://localhost:8983/solr/helloworld/select?indent=on&q=*:*&wt=json

Hier steht "q" für "Abfrageparameter zum Filtern der Daten". Es wird die Syntax "q = Feldname: Wert" verwendet. Hier bedeutet "q =:", alles abzufragen. "Wt" bedeutet "Writer-Typ" oder "Antworttyp".
Lassen Sie uns nun einige Filteroptionen abfragen. Sie können über einen Webbrowser oder beliebige REST-Clients wie POSTMAN, Sense, Fidler usw. auf diese REST-API zugreifen.

http://localhost:8983/solr/helloworld/select?indent=on&q=directed_by:"Gary Lennon"&wt=json

image

Hier haben wir alle Daten aus dem Filmdokument abgerufen, die mit dieser Abfrage gerichtet sind. Directed_by = ”Gary Lennon”. Wenn Sie gut mit SQL umgehen können, können wir diese Abfrage in den folgenden SQL SELECT-Befehl konvertieren.

SELECT * FROM FILMS WHERE directed_by="Gary Lennon"

image

Sie können mit dem folgenden REST-API-Aufruf auf dieselben Ergebnisse zugreifen. Sie sehen die gleichen Ergebnisse im Browser oder REST-Client.

http://localhost:8983/solr/helloworld/select?fl=genre&indent=on&q=directed_by:"Shane Acker"&wt=json

Hier steht "fl" für Fields List in Response oder Results. Wir sind daran interessiert, nur das Genre-Feld abzurufen. Konvertieren Sie dies in SQL Query.

SELECT genre FROM FILMS WHERE directed_by="Shane Acker"

Versuchen Sie auf die gleiche Weise, mit verschiedenen SELECT-Abfragen zu experimentieren, um Daten abzurufen oder zu filtern.

8. Löschen Sie Apache Solr-Dokumente

Hier werden wir ein Dokument löschen, das der Bedingung direct_by = ”Zack Snyder” entspricht. Wir verwenden denselben "Request-Handler" = "/ update", was bedeutet, dass wir den Core aktualisieren werden. Wir verwenden die Option "", was bedeutet, dass wir ein Dokument löschen oder entfernen, das der angegebenen Bedingung entspricht.

Hier verwenden wir den Befehl curl, um die DELETE-Operation auszuführen, um auch das Beispiel des CURL-Befehls abzudecken. Sie können dieses Beispiel mit anderen Optionen wie REST-Client usw. experimentieren.

$ curl http://localhost:8983/solr/helloworld/update/?commit=true -H "Content-Type: application/xml" -d "directed_by:'Zack Snyder'"


0563

9. Löschen Sie den Apache Solr Core

Wir können Apache Solr Core aktualisieren, indem wir "Request-Handler" = "/ update" verwenden und Operationen zum Hinzufügen / Aktualisieren / Löschen von Dokumenten ausführen. Wir können dazu entweder die REST-API für den Browser, die Admin-Konsole, den REST-Client oder den CURL-Befehl verwenden. Bei Bedarf können wir Kerne mithilfe der Option "Entladen" aus der Apache Solr Admin Console entfernen oder löschen.

Befolgen Sie diese Schritte, um einen Core zu entladen

  • Zugriff auf Solr Admin Console:http://localhost:8983/solr/

  • Klicken Sie auf die Option "Core Selector" und wählen Sie im Dropdown-Feld "helloworld" -Kern aus.

  • Klicken Sie auf der rechten Seite auf die Schaltfläche „Entladen“.

  • Der ausgewählte Kern wird aus Apache Solr entfernt oder entladen.

  • Der Core-Ordner wird nicht aus dem Pfad "server / solr" gelöscht.

10. Warum Apache Solr? Warum nicht Apache Lucene?

Wie wir wissen, ist Apache Lucene die grundlegende Kern-API für beide gängigen Suchmaschinen: Apache Solr und ElasticSearch. Apache Lucene ist jedoch eine einfache Java-API und nur für Java-basierte Anwendungen nützlich.

Apache Solr ist wie ElasticSearch ein Wrapper über der Apache Lucene-API. Es hat diese Java-API als REST-API verfügbar gemacht, wie im folgenden Diagramm gezeigt. Jetzt können wir diese Such-API in allen Anwendungen verwenden. Außerdem ist die REST-API sehr flexibel und leicht.

image

11. Apache Solr gegen ElasticSearch gegen relationale Datenbanken

Wie wir wissen, verwenden sowohl Apache Solr als auch ElasticSearch Apache Lucene, um ihre Kernfunktionen zu implementieren. Fast beide unterstützen dieselben Funktionen. Einige bemerkenswerte Ähnlichkeiten:

  • Beide verwenden Apache Lucene unter der Haube.

  • Beide unterstützen die REST Base API.

  • Beide sind Open Source-Suchmaschinen.

  • Beide unterstützen BigData und Cloud Technologies.

  • Beide unterstützen die Clusterverwaltung.

  • Beide sind als sekundäre Datenspeicher nützlich.

  • Beide verwenden die invertierte Indizierung von Apache Lucene, um die schnelle Suchfunktion zu unterstützen.

Sie haben die folgenden Unterschiede.

  • Apache Solr verwendet einige externe Komponenten: SolrCloud zur Unterstützung der Cloud- und verteilten Architektur, wobei ElasticSearch eine echte Cloud- und verteilte Architektur unterstützt.

  • Apache Solr verwendet Apache Zookeepter für die Clusterverwaltung, während ElasticSearch dafür Zen Discovery verwendet.

  • ElasticSearch unterstützt nur JSNO-basierte REST-API, wobei Apache Solr viele weitere Formate wie JSON, XML, Doc, CSV, Binary usw. unterstützt.

  • Apache Solr verfügt über eine integrierte Sicherheitsunterstützung, die ElasticSearch nicht bietet.

  • ElasticSearch unterstützt nur schemalosen Datenspeicher, während Apache Solr sowohl schemabasiert als auch schemafrei unterstützt.

Unterschiede zwischen Apache Solr und relationalen Datenbanken

  • Relationale Datenbanken unterstützen nur strukturierte Daten, wobei als Apache Solr sowohl strukturierte als auch unstrukturierte Daten verwendet werden.

  • Relationale Datenbanken eignen sich für normalisierte Daten, während Apache Solr für entnormalisierte Daten geeignet ist.

  • Relationale Datenbanken benötigen Schema, um ihre Daten zu speichern, da Apache Solr sowohl schemabasiert als auch schemafrei unterstützt.

  • Relationale Datenbanken unterstützen komplexe Abfragen und Verknüpfungen, die von Apache Solr nicht unterstützt wurden.

  • Wir können relationale Datenbanken als primären Datenspeicher verwenden, Apache Solr als sekundären Datenspeicher.