Sphinx ist ein einfacher, relevanter und quelloffener Volltextsuchserver. Es ist in der Programmiersprache C++ geschrieben und funktioniert mit Linux und anderen gängigen Betriebssystemen. Dieses Tutorial hilft Ihnen bei der Installation und Konfiguration des Sphinx-Volltextsuchservers auf den Betriebssystemen Ubuntu 16.04, 14.04 LTS.
Voraussetzungen
Bevor Sie mit diesem Handbuch beginnen, müssen Sie über Folgendes verfügen.
- Ubuntu-Server mit sudo-Zugriff
- Vorinstallierter MySQL-Server
Schritt 1 – Installieren Sie Sphinx
Die Installation von Sphinx auf Ubuntu ist einfach, da es sich im nativen Paket-Repository befindet. Installieren Sie es mit dem apt-get-Paketmanager auf Ihrem Ubuntu-System.
sudo add-apt-repository ppa:builds/sphinxsearch-rel22 sudo apt-get update sudo apt-get install sphinxsearch
Schritt 2 – MySQL-Datenbank importieren
Lassen Sie uns die Beispiel-SQL-Datei in die Datenbank importieren. Erstellen Sie zuerst eine Datenbank namens test auf Ihrem MySQL-Server und stellen Sie danach die vom Sphinx-Suchpaket bereitgestellte Datenbank wieder her.
sudo mysqladmin -u root -p create test sudo mysql -u root -p test < /usr/share/doc/sphinxsearch/example-conf/example.sql
Schritt 3 – Sphinx konfigurieren
Bearbeiten Sie die Sphinx-Konfiguration wie unten und bearbeiten Sie die MySQL-Verbindungskonfiguration wie unten gezeigt.
sudo vi /etc/sphinxsearch/sphinx.conf
source src1 { # data source type. mandatory, no default value # known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc type = mysql ##################################################################### ## SQL settings (for 'mysql' and 'pgsql' types) ##################################################################### # some straightforward parameters for SQL source types sql_host = localhost sql_user = root sql_pass = secret sql_db = test sql_port = 3306 # optional, default is 3306
Schritt 4 – Indexer ausführen
Führen Sie den Indexer aus, um den Volltextindex aus Ihren Daten zu erstellen. Der Indexer ist das erste der beiden Hauptwerkzeuge von Sphinx. Es funktioniert zum Sammeln der Daten, die durchsucht werden können. Sie werden die Ergebnisse wie unten sehen.
sudo indexer --all Sphinx 2.2.11-id64-release (95ae9a6) Copyright (c) 2001-2016, Andrew Aksyonoff Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com) using config file '/etc/sphinxsearch/sphinx.conf'... indexing index 'test1'... collected 4 docs, 0.0 MB sorted 0.0 Mhits, 100.0% done total 4 docs, 193 bytes total 0.006 sec, 30791 bytes/sec, 638.16 docs/sec indexing index 'test1stemmed'... collected 4 docs, 0.0 MB sorted 0.0 Mhits, 100.0% done total 4 docs, 193 bytes total 0.001 sec, 99382 bytes/sec, 2059.73 docs/sec skipping non-plain index 'dist1'... skipping non-plain index 'rt'... total 8 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg total 24 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
Schritt 5 – Sphinx starten
Konfigurieren Sie außerdem Ihren Sphinx-Server so, dass er beim Systemstart automatisch startet. Verwenden Sie den folgenden Befehl, um START auf yes zu setzen.
sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch
Starten Sie nun auch den Dienst zum ersten Mal und prüfen Sie den Status.
service sphinxsearch start service sphinxsearch status
Sie können den Indexer in Ihrem Crontab auch so konfigurieren, dass er in regelmäßigen Abständen ausgeführt wird. Die folgende Crontab wird stündlich ausgeführt.
0 * * * * /usr/bin/indexer --rotate --all
Schritt 6 – Arbeiten mit Sphinx
Lassen Sie uns einige Abfragen auf Ihrem Sphinx-Server ausführen. Verbinden Sie sich zuerst mit dem folgenden ocmmand.
mit dem Sphinx MySQL-Servermysql -h0 -P9306
Führen Sie nun einen Befehl nach dem anderen unten aus und sehen Sie sich die Änderungen an. Dies dient nur Ihrem eigenen Lernen.
mysql> SELECT * FROM test1 WHERE MATCH('document'); mysql> INSERT INTO rt VALUES (1, 'adding', 'sample text here', 11); mysql> INSERT INTO rt VALUES (2, 'adding some more', 'sample text here', 22); mysql> SELECT gid/11 FROM rt WHERE MATCH('sample') GROUP BY gid; mysql> SELECT * FROM rt ORDER BY gid DESC; mysql> SELECT *, WEIGHT() FROM test1 WHERE MATCH('"document one"/1'); mysql> SHOW META; mysql> SET profiling=1; mysql> SELECT * FROM test1 WHERE id IN (1,2,4); mysql> SHOW PROFILE; mysql> SELECT id, id%3 idd FROM test1 WHERE MATCH('this is | nothing') GROUP BY idd; mysql> SHOW PROFILE; mysql> SELECT id FROM test1 WHERE MATCH('is this a good plan?'); mysql> SHOW PLAN; mysql> SELECT COUNT(*) FROM test1; mysql> CALL KEYWORDS ('one two three', 'test1'); mysql> CALL KEYWORDS ('one two three', 'test1', 1); mysql> SHOW TABLES;