So installieren und konfigurieren Sie Sphinx unter Ubuntu 14.04

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 anhand 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 - Installation von MySQL Server

  • Hinweis: * Sie müssen diesen Abschnitt nur ausfüllen, wenn Sie noch keinen MySQL-Server installiert haben.

In diesem Abschnitt installieren wir den MySQL-Server. In MySQL können wir eine Datenbank mit Beispieldaten speichern, mit denen wir die Suchfähigkeiten von Sphinx testen können.

Aktualisieren Sie die Paketliste.

sudo apt-get update

Dann installieren Sie den MySQL Server.

sudo apt-get install mysql-server

Geben Sie ein Passwort für den Root-Benutzer ein, wenn Sie dazu aufgefordert werden, und geben Sie dasselbe Passwort zur Bestätigung erneut ein.

Schritt 2 - Installieren von Sphinx

In diesem Abschnitt installieren wir Sphinx.

Führen Sie zum Installieren von Sphinx Folgendes aus:

sudo apt-get install sphinxsearch

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

Schritt 3 - Erstellen der Testdatenbank

In diesem Abschnitt richten wir eine Datenbank anhand der mit dem Paket gelieferten Beispiel-SQL-Datei ein.

Importieren wir eine Beispiel-SQL-Datei in die Datenbank.

Melden Sie sich 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 "+ mysql> +".

Erstellen Sie eine Datenbank mit dem Namen "+ test".

CREATE DATABASE test;

Importieren Sie die SQL-Datei.

SOURCE /etc/sphinxsearch/example.sql;

Beenden Sie dann die MySQL-Shell.

quit

Jetzt sollte die Testdatenbank mit Daten gefüllt sein.

Schritt 4 - Konfiguration von Sphinx

In diesem Abschnitt konfigurieren wir die Sphinx-Konfigurationsdatei.

Erstellen Sie die Datei + sphinx.conf +.

sudo nano /etc/sphinxsearch/sphinx.conf

Die Sphinx-Konfiguration besteht aus 3 Hauptblöcken, die für den Betrieb unbedingt erforderlich sind. Sie sind * index *, * searchd * und * source *. Jeder dieser Blöcke wird unten beschrieben, und am Ende dieses Schritts wird die gesamte Datei + sphinx.conf + eingefügt, damit Sie sie 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 der SQL-Abfrage 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 Beschreibungen der einzelnen Felder und des Quellblocks.

  • + sql_host +: Hostname für den MySQL-Host. In unserem Beispiel ist dies der * 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 +: Dies ist die Abfrage, mit der Daten zum Index gesichert werden.

source src1
{
 type          = mysql

 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

 sql_query_info        = SELECT * FROM documents WHERE id=$id
}

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

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

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

  • + charset_type +: Dies ist der Zeichensatz des Index. Sie setzen dies auch auf * utf-8 *.

index test1
{
 source            = src1
 path          = /var/lib/sphinxsearch/data/test1
 docinfo           = extern
 charset_type      = sbcs
}

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

  • + listen +: Dies ist der Port, den der Sphinx Daemon ausführen wird. In unserem Beispiel ist dies 9312.

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

  • + pid_file +: Dies ist der Pfad zur PID-Datei des Sphinx-Daemons.

  • + max_matches +: Maximale Anzahl Übereinstimmungen pro Suchbegriff.

  • + 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 die Verknüpfung alter Indexkopien bei erfolgreicher Drehung aufgehoben werden soll.

searchd
{
 listen            = 9312   # Port to listen on
 log           = /var/log/sphinxsearch/searchd.log
 query_log     = /var/log/sphinxsearch/query.log
 read_timeout      = 5
 max_children      = 30
 pid_file      = /var/run/sphinxsearch/searchd.pid
 max_matches       = 1000
 seamless_rotate       = 1
 preopen_indexes       = 1
 unlink_old        = 1
 binlog_path       = /var/lib/sphinxsearch/data
}

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

source src1
{
 type          = mysql

 sql_host      = localhost
 sql_user      = root
 sql_pass      =  # change this to your root users MySQL password
 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

 sql_query_info        = SELECT * FROM documents WHERE id=$id
}
index test1
{
 source            = src1
 path              = /var/lib/sphinxsearch/data/test1
 docinfo           = extern
 charset_type      = sbcs
}
searchd
{
 listen            = 9312
 log               = /var/log/sphinxsearch/searchd.log
 query_log         = /var/log/sphinxsearch/query.log
 read_timeout      = 5
 max_children      = 30
 pid_file          = /var/run/sphinxsearch/searchd.pid
 max_matches       = 1000
 seamless_rotate   = 1
 preopen_indexes   = 1
 unlink_old        = 1
 binlog_path       = /var/lib/sphinxsearch/data
}

Schritt 5 - Hinzufügen von Daten zum Index

In diesem Abschnitt werden dem Sphinx-Index Daten hinzugefügt.

Fügen Sie mit der zuvor erstellten Konfiguration Daten zum Index hinzu.

sudo indexer --all

Sie sollten etwas bekommen, das wie folgt aussieht.

Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'test1'...
WARNING: collect_hits: mem_limit=0 kb too low, increasing to 25600 kb
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.005 sec, 33788 bytes/sec, 700.28 docs/sec
total 3 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

Um den Index auf dem neuesten Stand zu halten, können Sie einen Cronjob erstellen.

Crontab öffnen.

crontab -e

Möglicherweise werden Sie gefragt, welchen Texteditor Sie verwenden möchten. Wählen Sie, was Sie bevorzugen. In diesem Tutorial haben wir "+ nano +" verwendet.

Kopieren Sie die folgenden Elemente und fügen Sie sie am Ende der Datei ein. Speichern und schließen Sie sie dann.

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

Der obige Cronjob wird stündlich ausgeführt und fügt dem Index neue Daten unter Verwendung der Standardkonfigurationsdatei hinzu.

Schritt 6 - Starten von Sphinx

In diesem Abschnitt starten wir den Sphinx-Daemon.

Standardmäßig ist der Sphinx-Daemon deaktiviert. Um Sphinx zu aktivieren, öffnen Sie zuerst "+ / etc / default / sphinxsearch +".

sudo nano /etc/default/sphinxsearch

Suchen Sie die Zeile + START = no + und setzen Sie sie auf yes.

START=yes

Speichern und schließen Sie dann die Datei.

Starten Sie zum Schluss den Sphinx-Daemon.

sudo service sphinxsearch start

In diesem Abschnitt werden wir unsere Suche testen. Geben Sie den folgenden Befehl ein.

search this is my test document number

Sie sollten etwas bekommen, das wie folgt aussieht.

Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/sphinx.conf'...
index 'test1': query 'this is my test document number ': returned 2 matches of 2 total in 0.002 sec

displaying matches:
1. document=1, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=1
group_id=1
group_id2=5
date_added=2014-12-16 09:49:04
title=test one
content=this is my test document number one. also checking search within phrases.
2. document=2, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=2
group_id=1
group_id2=6
date_added=2014-12-16 09:49:04
title=test two
content=this is my test document number two

words:
1. 'this': 4 documents, 4 hits
2. 'is': 4 documents, 4 hits
3. 'my': 2 documents, 2 hits
4. 'test': 3 documents, 5 hits
5. 'document': 2 documents, 2 hits
6. 'number': 3 documents, 3 hits

Oben finden Sie 2 Treffer aus unserem Testindex für unseren Suchbegriff. Sie können auch Übereinstimmungen pro Wort finden.

Fazit

In diesem Tutorial haben wir Ihnen eine sehr einfache Suche über die Befehlszeile gezeigt. Offizielle native SphinxAPI-Implementierungen für PHP, Perl, Python, Ruby und Java finden Sie hier.

Wenn Sie PHP verwenden, sind here einige praktische Beispiele zum Testen von Sphinx.

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