Lassen Sie mich neben der Beantwortung der Fragen von OP einige Einblicke in Apache Solr geben, von der einfachen Einführung bis zur detaillierten Installation und Implementierung .
Einfache Einführung
Jeder, der Erfahrung mit den oben genannten Suchmaschinen oder anderen nicht in der Liste aufgeführten Suchmaschinen hat - ich würde gerne Ihre Meinung hören.
Solr sollte nicht zur Lösung von Echtzeitproblemen verwendet werden. Für Suchmaschinen ist Solr so ziemlich ein Spiel und funktioniert einwandfrei .
Solr funktioniert gut mit Webanwendungen mit hohem Datenverkehr ( ich habe irgendwo gelesen, dass es dafür nicht geeignet ist, aber ich unterstütze diese Aussage ). Es nutzt den RAM, nicht die CPU.
- Ergebnisrelevanz und Ranking
Der Boost hilft Ihnen dabei, Ihre Ergebnisse ganz oben zu platzieren. Sprich : Sie versuchen , einen Namen zu suchen john in den Feldern Vorname und Nachname , und Sie wollen Relevanz der geben Vorname Feld, dann müssen Sie steigern die oben Vorname Feld wie gezeigt.
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
Wie Sie sehen können, wird das Feld für den Vornamen mit einer Punktzahl von 2 erhöht .
Mehr zu SolrRelevancy
- Such- und Indizierungsgeschwindigkeit
Die Geschwindigkeit ist unglaublich hoch und keine Kompromisse. Der Grund, warum ich nach Solr gezogen bin .
In Bezug auf die Indizierungsgeschwindigkeit kann Solr auch JOINS aus Ihren Datenbanktabellen verarbeiten. Ein höherer und komplexer JOIN wirkt sich auf die Indizierungsgeschwindigkeit aus. Eine enorme RAM- Konfiguration kann diese Situation jedoch problemlos bewältigen.
Je höher der RAM, desto schneller ist die Indizierungsgeschwindigkeit von Solr.
- Benutzerfreundlichkeit und einfache Integration in Django
Ich habe nie versucht, Solr und Django zu integrieren , aber Sie können dies mit Haystack erreichen . Ich habe einen interessanten Artikel darüber gefunden und hier ist der Github dafür.
- Ressourcenanforderungen - Die Site wird auf einem VPS gehostet, sodass die Suchmaschine im Idealfall nicht viel RAM und CPU benötigt
Solr züchtet auf RAM. Wenn der RAM also hoch ist, müssen Sie sich keine Sorgen um Solr machen .
Solrs RAM-Auslastung steigt bei vollständiger Indizierung. Wenn Sie über einige Milliarden Datensätze verfügen, können Sie Delta-Importe intelligent einsetzen, um diese Situation zu bewältigen. Wie bereits erläutert, ist Solr nur eine Echtzeitlösung .
Solr ist hoch skalierbar. Schauen Sie sich SolrCloud an . Einige Hauptmerkmale davon.
- Shards (oder Sharding ist das Konzept, den Index auf mehrere Computer zu verteilen, z. B. wenn Ihr Index zu groß geworden ist)
- Lastausgleich (Wenn Solrj mit der Solr-Cloud verwendet wird, wird der Lastausgleich mithilfe des Round-Robin-Mechanismus automatisch durchgeführt.)
- Verteilte Suche
- Hohe Verfügbarkeit
- zusätzliche Funktionen wie "Meinten Sie?", verwandte Suchanfragen usw.
Für das obige Szenario können Sie die SpellCheckComponent verwenden , die mit Solr gepackt ist . Es gibt viele andere Funktionen, die SnowballPorterFilterFactory hilft Datensätze abzurufen sagen , wenn Sie eingegeben haben , Bücher statt Buch , werden Sie mit den Ergebnissen im Zusammenhang präsentiert Buch .
Diese Antwort konzentriert sich weitgehend auf Apache Solr & MySQL . Django ist außer Reichweite.
Angenommen, Sie befinden sich in einer LINUX-Umgebung, können Sie mit diesem Artikel fortfahren. (meins war eine Ubuntu 14.04 Version)
Detaillierte Installation
Loslegen
Laden Sie Apache Solr von hier . Das wäre Version 4.8.1 . Sie könnten neue Versionen herunterladen, ich fand diesen Stall.
Extrahieren Sie das Archiv nach dem Herunterladen in einen Ordner Ihrer Wahl. Sag .. Downloads
oder was auch immer .. Also wird es so aussehenDownloads/solr-4.8.1/
Auf Ihre Aufforderung hin. Navigieren Sie in das Verzeichnis
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Also jetzt bist du hier ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Starten Sie den Jetty Application Server
Jetty ist im Beispielordner des solr-4.8.1
Verzeichnisses verfügbar. Navigieren Sie also darin und starten Sie den Jetty Application Server.
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Schließen Sie das Terminal jetzt nicht, minimieren Sie es und lassen Sie es beiseite.
(TIPP: Verwenden Sie & after start.jar, um den Jetty Server im Hintergrund auszuführen.)
Um zu überprüfen, ob Apache Solr erfolgreich ausgeführt wird, besuchen Sie diese URL im Browser. http: // localhost: 8983 / solr
Jetty auf einem benutzerdefinierten Port ausführen
Es wird standardmäßig auf dem Port 8983 ausgeführt. Sie können den Port entweder hier oder direkt in der jetty.xml
Datei ändern .
java -Djetty.port=9091 -jar start.jar
Laden Sie den JConnector herunter
Diese JAR - Datei dient als Brücke zwischen MySQL und JDBC, Laden Sie die Platform Independent Version hier
Extrahieren mysql-connector-java-5.1.31-bin.jar
Sie nach dem Herunterladen den Ordner, kopieren Sie den Ordner und fügen Sie ihn in das lib- Verzeichnis ein.
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Erstellen der MySQL-Tabelle, die mit Apache Solr verknüpft werden soll
Um Solr verwenden zu können, müssen Sie nach Tabellen und Daten suchen. Dafür werden wir MySQL verwenden, um eine Tabelle zu erstellen und einige zufällige Namen zu pushen , und dann könnten wir Solr verwenden , um eine Verbindung zu MySQL herzustellen und diese Tabelle und ihre Einträge zu indizieren.
1.Tabellenstruktur
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2. Füllen Sie die obige Tabelle aus
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
In den Kern eindringen und die lib-Direktiven hinzufügen
1.Navigieren zu
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2. Ändern der Datei solrconfig.xml
Fügen Sie diese beiden Anweisungen zu dieser Datei hinzu.
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
Fügen Sie nun den DIH (Data Import Handler) hinzu.
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3.Erstellen Sie die Datei db-data-config.xml
Wenn die Datei vorhanden ist, ignorieren Sie sie und fügen Sie diese Zeilen zu dieser Datei hinzu. Wie Sie in der ersten Zeile sehen können, müssen Sie die Anmeldeinformationen Ihrer MySQL- Datenbank angeben . Der Datenbankname, der Benutzername und das Passwort.
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(TIPP: Sie können eine beliebige Anzahl von Entitäten haben, aber achten Sie auf das ID-Feld. Wenn diese identisch sind, wird die Indizierung übersprungen.)
4. Ändern Sie die Datei schema.xml
Fügen Sie dies wie gezeigt zu Ihrer schema.xml hinzu .
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
Implementierung
Indizierung
Hier ist das eigentliche Geschäft. Sie müssen die Indizierung von Daten von MySQL nach Solr durchführen, um Solr-Abfragen verwenden zu können.
Schritt 1: Gehen Sie zum Solr Admin Panel
Klicken Sie in Ihrem Browser auf die URL http: // localhost: 8983 / solr . Der Bildschirm öffnet sich so.
Gehen , wie die Markierung zeigt an , zu Protokollierung inorder zu überprüfen , ob eine der oben genannten Konfiguration zu Fehlern geführt hat.
Schritt 2: Überprüfen Sie Ihre Protokolle
Ok, jetzt bist du hier. Wie du kannst, gibt es viele gelbe Meldungen (WARNHINWEISE). Stellen Sie sicher, dass keine rot markierten Fehlermeldungen vorliegen. Zuvor hatten wir in unserer Konfiguration eine Auswahlabfrage in unserer Datei db-data-config.xml hinzugefügt . Wenn bei dieser Abfrage Fehler aufgetreten wären, wäre diese hier angezeigt worden.
Gut, keine Fehler. Wir sind gut zu gehen. Wählen Sie wie abgebildet Sammlung1 aus der Liste aus und wählen Sie Datenimport
Schritt 3: DIH (Data Import Handler)
Mit dem DIH stellen Sie von Solr über die Konfigurationsdatei db-data-config.xml über die Solr- Schnittstelle eine Verbindung zu MySQL her und rufen die 10 Datensätze aus der Datenbank ab, die auf Solr indiziert wird .
Um dies zu tun, wählen Sie Voll Import , und überprüfen Sie die Optionen reinigen und Commit . Klicken Sie nun wie gezeigt auf Ausführen .
Alternativ können Sie auch direkt verwenden Voll Import Abfrage wie folgt zu ..
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
Nachdem Sie auf Ausführen geklickt haben , beginnt Solr mit der Indizierung der Datensätze. Wenn Fehler aufgetreten sind , wird angezeigt , dass die Indizierung fehlgeschlagen ist, und Sie müssen zum Abschnitt Protokollierung zurückkehren, um festzustellen , was schief gelaufen ist.
Angenommen, bei dieser Konfiguration liegen keine Fehler vor, und wenn die Indizierung erfolgreich abgeschlossen wurde, erhalten Sie diese Benachrichtigung.
Schritt 4: Ausführen von Solr-Abfragen
Anscheinend ist alles gut gelaufen. Jetzt können Sie Solr Queries verwenden, um die indizierten Daten abzufragen. Klicken Sie links auf die Abfrage und dann unten auf die Schaltfläche Ausführen .
Sie sehen die indizierten Datensätze wie gezeigt.
Die entsprechende Solr- Abfrage zum Auflisten aller Datensätze lautet
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
Nun, es gibt alle 10 indizierten Datensätze. Angenommen, wir benötigen nur Namen, die mit Ja beginnen . In diesem Fall müssen Sie den Spaltennamen als Ziel festlegen solr_name
. Daher lautet Ihre Abfrage wie folgt.
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
So schreiben Sie Solr- Abfragen. Um mehr darüber zu lesen, lesen Sie diesen schönen Artikel .