So installieren und konfigurieren Sie Sphinx unter CentOS 7

Einführung

Sphinx ist eine Open-Source-Suchmaschine, die die Volltextsuche ermöglicht. Es ist am besten dafür bekannt, Suchvorgänge über große Datenmengen sehr effizient durchzuführen. Die zu indizierenden Daten können im Allgemeinen aus sehr unterschiedlichen Quellen stammen: SQL-Datenbanken, Nur-Text-Dateien, HTML-Dateien, Postfächer usw.

Einige Hauptmerkmale von Sphinx sind:

  • Hohe Indizierungs- und Suchleistung

  • Erweiterte Indizierungs- und Abfrage-Tools

  • Erweiterte Nachbearbeitung der Ergebnismenge

  • Bewährte Skalierbarkeit für Milliarden von Dokumenten, Terabyte an Daten und Tausende von Abfragen pro Sekunde

  • Einfache Integration in SQL- und XML-Datenquellen sowie in SphinxQL-, SphinxAPI- oder SphinxSE-Suchoberflächen

  • Einfache Skalierung mit verteilten Suchen

In diesem Tutorial richten wir Sphinx mit MySQL Server unter Verwendung der im Distributionspaket enthaltenen Beispiel-SQL-Datei ein. Sie erhalten eine grundlegende Vorstellung davon, wie Sie Sphinx für Ihr Projekt verwenden können.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie:

Schritt 1 - Installieren von Sphinx

Zum Zeitpunkt des Schreibens ist die neueste Sphinx-Version 2.2.11. Sie finden die neueste Version auf der Sphinx-Website.

Vor der Installation von Sphinx müssen Sie zuerst die Abhängigkeiten installieren.

sudo yum install -y postgresql-libs unixODBC

Wechseln Sie in das Verzeichnis "+ tmp +", um die Sphinx-Dateien an einem unauffälligen Ort herunterzuladen.

cd /tmp

Laden Sie die neueste Sphinx-Version mit + wget + herunter.

wget http://sphinxsearch.com/files/sphinx-2.2.11-1.rhel7.x86_64.rpm

Zum Schluss installieren Sie es mit + yum +.

sudo yum install -y sphinx-2.2.11-1.rhel7.x86_64.rpm

Jetzt haben Sie Sphinx erfolgreich auf Ihrem Server installiert. Bevor Sie den Sphinx-Daemon starten, müssen Sie ihn konfigurieren.

Schritt 2 - Erstellen der Testdatenbank

Hier richten wir eine Datenbank anhand der Beispieldaten in der mit dem Paket gelieferten SQL-Datei ein. Auf diese Weise können wir später testen, ob die Sphinx-Suche funktioniert.

Importieren wir die Beispiel-SQL-Datei in die Datenbank. Melden Sie sich zunächst bei der MySQL-Server-Shell an.

mysql -u root -p

Geben Sie das Passwort für den MySQL-Root ein, wenn Sie dazu aufgefordert werden. Ihre Eingabeaufforderung ändert sich in "+ MariaDB> +".

Erstellen Sie eine Dummy-Datenbank. Hier nennen wir es * test *, aber Sie können es benennen, was Sie wollen.

CREATE DATABASE ;

Importieren Sie die Beispiel-SQL-Datei.

SOURCE /usr/share/doc/sphinx-2.2.11/example.sql;

Verlassen Sie dann die MySQL-Shell.

quit

Jetzt haben Sie eine Datenbank mit den Beispieldaten gefüllt. Als Nächstes passen wir die Konfiguration von Sphinx an.

Schritt 3 - Konfiguration von Sphinx

Die Konfiguration von Sphinx sollte sich in einer Datei mit dem Namen "+ sphinx.conf " in " / etc / sphinx +" befinden. Die Konfiguration besteht aus 3 Hauptblöcken: * index *, * searchd * und * source *.

Es ist bereits eine minimale Konfiguration vorhanden. Wir stellen Ihnen jedoch eine neue Beispielkonfigurationsdatei zur Verfügung, mit der Sie jeden Abschnitt verwenden und erläutern können, damit Sie ihn später anpassen können.

Verschieben Sie zunächst die vorhandene Datei + sphinx.conf +.

sudo mv /etc/sphinx/sphinx.conf /etc/sphinx/sphinx.conf2

Erstellen Sie eine neue "+ sphinx.conf " -Datei mit " vi +" oder Ihrem bevorzugten Texteditor.

sudo vi /etc/sphinx/sphinx.conf

Jeder der * index * -, * searchd * - und * source * -Blöcke wird unten beschrieben. Am Ende dieses Schritts wird die gesamte Datei "+ sphinx.conf +" eingefügt, die Sie kopieren und in die Datei einfügen können.

Der * source * -Block enthält die Art der Quelle, den Benutzernamen und das Passwort für den MySQL-Server. Die erste Spalte von "+ sql_query +" sollte eine eindeutige ID sein. Die SQL-Abfrage wird für jeden Index ausgeführt und speichert die Daten in der Sphinx-Indexdatei. Nachfolgend finden Sie die Beschreibungen der einzelnen Felder und des Quellblocks.

  • + Typ +: Typ der zu indizierenden Datenquelle. In unserem Beispiel ist dies * mysql *. Andere unterstützte Typen sind pgsql, mssql, xmlpipe2, odbc und mehr.

  • + sql_host +: Hostname für den MySQL-Host. In unserem Beispiel ist dies "+ localhost +". Dies kann eine Domain oder eine IP-Adresse sein.

  • + sql_user +: Benutzername für das MySQL-Login. In unserem Beispiel ist dies * root *.

  • + sql_pass +: Passwort für den MySQL-Benutzer. In unserem Beispiel ist dies das Passwort des Root-MySQL-Benutzers.

  • + sql_db +: Name der Datenbank, in der Daten gespeichert werden. In unserem Beispiel ist dies * test *.

  • + sql_query +: Die Abfrage, mit der Daten aus der Datenbank in den Index geschrieben werden.

Dies ist der Quellblock:

Quellblock für sphinx.conf

source src1
{
 type          = mysql

 #SQL settings (for ‘mysql’ and ‘pgsql’ types)

 sql_host      = localhost
 sql_user      = root
 sql_pass      = password
 sql_db        = test
 sql_port      = 3306 # optional, default is 3306

 sql_query     = \
 SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
 FROM documents

 sql_attr_uint         = group_id
 sql_attr_timestamp    = date_added
}

Die * index * -Komponente enthält die Quelle und den Pfad zum Speichern der Daten. + in

  • + source +: Name des Quellblocks. In unserem Beispiel ist dies * src1 *.

  • + path +: Der Pfad zum Speichern des Index.

Indexblock für sphinx.conf

index test1
{
 source        = src1
 path          = /var/lib/sphinx/test1
 docinfo       = extern
}

Die * searchd * -Komponente enthält den Port und andere Variablen zum Ausführen des Sphinx-Daemons.

  • + listen +: Der Port, auf dem der Sphinx-Daemon ausgeführt wird, gefolgt vom Protokoll. In unserem Beispiel ist dies * 9306: mysql41 *. Bekannte Protokolle sind : sphinx (SphinxAPI) und : mysql41 (SphinxQL)

  • + query_log +: Der Pfad zum Speichern des Abfrageprotokolls.

  • + pid_file +: Der Pfad zur PID-Datei des Sphinx-Daemons.

  • + seamless_rotate +: Verhindert Suchabbrüche beim Drehen von Indizes mit großen Datenmengen, die vorab zwischengespeichert werden sollen.

  • + preopen_indexes +: Gibt an, ob beim Start alle Indizes zwangsweise vorgeöffnet werden sollen.

  • + unlink_old +: Gibt an, ob alte Indexkopien bei erfolgreicher Drehung gelöscht werden sollen.

Suchblock für sphinx.conf

searchd
{
 listen            = 9312:sphinx       #SphinxAPI port
 listen            = 9306:mysql41      #SphinxQL port
 log               = /var/log/sphinx/searchd.log
 query_log         = /var/log/sphinx/query.log
 read_timeout      = 5
 max_children      = 30
 pid_file          = /var/run/sphinx/searchd.pid
 seamless_rotate   = 1
 preopen_indexes   = 1
 unlink_old        = 1
 binlog_path       = /var/lib/sphinx/
}

Die vollständige Konfiguration zum Kopieren und Einfügen finden Sie unten. Die einzige Variable, die Sie unten ändern müssen, ist die Variable "+ sql_pass +" im Quellblock, die hervorgehoben ist.

Die vollständige sphinx.conf-Datei

source src1
{
 type          = mysql

 sql_host      = localhost
 sql_user      = root
 sql_pass      =
 sql_db        = test
 sql_port      = 3306

 sql_query     = \
 SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
 FROM documents

 sql_attr_uint         = group_id
 sql_attr_timestamp    = date_added
}
index test1
{
 source            = src1
 path              = /var/lib/sphinx/test1
 docinfo           = extern
}
searchd
{
 listen            = 9306:mysql41
 log               = /var/log/sphinx/searchd.log
 query_log         = /var/log/sphinx/query.log
 read_timeout      = 5
 max_children      = 30
 pid_file          = /var/run/sphinx/searchd.pid
 seamless_rotate   = 1
 preopen_indexes   = 1
 unlink_old        = 1
 binlog_path       = /var/lib/sphinx/
}

Weitere Informationen zu den Konfigurationen finden Sie in der Datei + / usr / share / doc / sphinx-2.2.11 / sphinx.conf.dist +, in der alle Variablen ausführlich erläutert werden.

Schritt 4 - Index verwalten

In diesem Schritt fügen wir dem Sphinx-Index Daten hinzu und stellen mit "+ cron +" sicher, dass der Index auf dem neuesten Stand ist.

Fügen Sie dem Index zunächst Daten hinzu, indem Sie die zuvor erstellte Konfiguration verwenden.

sudo indexer --all

Sie sollten etwas bekommen, das wie folgt aussieht.

OutputSphinx 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/sphinx/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, 29765 bytes/sec, 616.90 docs/sec
total 4 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

In Produktionsumgebungen ist es erforderlich, den Index auf dem neuesten Stand zu halten. Dazu erstellen wir einen Cron-Job. Öffnen Sie zuerst + crontab +.

crontab -e

Der folgende Cron-Job wird stündlich ausgeführt und fügt dem Index mithilfe der zuvor erstellten Konfigurationsdatei neue Daten hinzu. Kopieren Sie sie und fügen Sie sie am Ende der Datei ein. Speichern und schließen Sie dann die Datei.

crontab

@hourly /usr/bin/indexer --rotate --config /etc/sphinx/sphinx.conf --all

Nachdem Sphinx vollständig eingerichtet und konfiguriert ist, können wir den Dienst starten und ausprobieren.

Schritt 5 - Starten von Sphinx

Verwenden Sie "+ systemctl +", um den Sphinx-Daemon zu starten.

sudo systemctl start searchd

Führen Sie Folgendes aus, um zu überprüfen, ob der Sphinx-Daemon ordnungsgemäß ausgeführt wird:

sudo systemctl status searchd

Sie sollten etwas bekommen, das wie folgt aussieht.

Output●  searchd.service - SphinxSearch Search Engine
  Loaded: loaded (/usr/lib/systemd/system/searchd.service; disabled; vendor preset: disabled)
  Active: active (running) since Fri 2016-08-19 17:48:39 UTC; 5s ago
  . . .

Sphinx ist vollständig angepasst und wird ausgeführt. Wir werden daher als Nächstes überprüfen, ob es ordnungsgemäß funktioniert.

Schritt 6 - Testen der Suchfunktion

Nachdem alles eingerichtet ist, testen wir die Suchfunktion. Stellen Sie über die MySQL-Schnittstelle eine Verbindung zu SphinxQL her. Ihre Eingabeaufforderung ändert sich in "+ MySQL> +".

mysql -h0 -P9306

Lass uns einen Satz suchen.

SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;

Sie sollten etwas bekommen, das wie folgt aussieht.

Output+------+----------+------------+
| id   | group_id | date_added |
+------+----------+------------+
|    1 |        1 | 1465979047 |
|    2 |        1 | 1465979047 |
+------+----------+------------+
2 rows in set (0.00 sec)

+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| total         | 2        |
| total_found   | 2        |
| time          | 0.000    |
| keyword[0]    | test     |
| docs[0]       | 3        |
| hits[0]       | 5        |
| keyword[1]    | document |
| docs[1]       | 2        |
| hits[1]       | 2        |
+---------------+----------+
9 rows in set (0.00 sec)

Im obigen Ergebnis können Sie sehen, dass Sphinx 2 Übereinstimmungen aus unserem + test1 + - Index für unseren Testsatz gefunden hat. Der Befehl + SHOW META; + zeigt auch die Treffer pro Schlüsselwort im Satz an.

Lassen Sie uns einige Keywords durchsuchen.

CALL KEYWORDS ('test one three', 'test1', 1);

Sie sollten etwas bekommen, das wie folgt aussieht.

Output+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1    | test      | test       | 3    | 5    |
| 2    | one       | one        | 1    | 2    |
| 3    | three     | three      | 0    | 0    |
+------+-----------+------------+------+------+
3 rows in set (0.00 sec)

Im obigen Ergebnis sehen Sie, dass Sphinx im Index * test1 * Folgendes gefunden hat:

  • 5 Übereinstimmungen in 3 Dokumenten für das Keyword "Test"

  • 2 Übereinstimmungen in 1 Dokument für das Keyword "Eins"

  • 0 Übereinstimmungen in 0 Dokumenten für das Keyword "Drei"

Nachdem Sie Sphinx getestet haben, können Sie die Testdatenbank mit + DROP DATABASE test; + löschen, wenn Sie möchten.

Wenn Sie fertig sind, verlassen Sie die MySQL-Shell.

quit

Fazit

In diesem Tutorial haben wir Ihnen gezeigt, wie Sie Sphinx installieren und eine einfache Suche mit SphinxQL und MySQL durchführen.

Mit Sphinx können Sie Ihrer Website ganz einfach eine benutzerdefinierte Suche hinzufügen. Weitere Informationen zur Verwendung von Sphinx finden Sie unter http://sphinx.com [der Projektwebsite].