ubuntuusers.de

SQL Phrase Index

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

SQL Phrase Index 🇬🇧 (Abk. Sphinx) ist eine Open Source (GPL2) Volltextsuchmaschine. In der Suchmaschine enthalten sind ein Indexer, ein Suchdaemon und ein Kommandozeilen-Suchtool. Es gibt unter anderem APIs für Perl, Python, PHP und Ruby. Auch für MySQL ist eine Storage Engine (SphinxSE) verfügbar, mit der man die Vorteile einer schnellen Suche mit denen einer MySQL-Tabelle vereinen kann. Seine Hauptvorteile spielt Sphinx bei der Implementierung von eigenen Such-Engines für Programme oder Webapplikationen aus, die große Datenmengen in kurzer Zeit verarbeiten müssen. Dieser Artikel bietet eine Einführung in Sphinx und seine Grundkonfiguration. Der erweiterte Umgang sowie die Verwendung der APIs oder der Storage-Engine wird nicht weiter behandelt.

Installation

Folgende Pakete müssen installiert [1] werden:

  • sphinxsearch (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install sphinxsearch 

Oder mit apturl installieren, Link: apt://sphinxsearch

Konfiguration

Sphinx wird durch die Datei /etc/sphinxsearch/sphinx.conf konfiguriert[2][3]. Als Minimum müssen eine Datenquelle und ein Index eingerichtet werden, um die Suchmaschine zu verwenden.

Konfiguration einer Quelle

Um einen Index anlegen zu können, benötigt Sphinx eine Quelle. In diesem Beispiel wird eine MySQL-Datenbank als Datenquelle verwendet. Die DB-Tabelle enthält Nachrichten für ein bestimmtes Thema und sieht so aus:

News
Name Typ Merkmal
id INTEGER PRIMARY, AUTO_INCREMENT
headline VARCHAR -
publicationDate DATETIME -
text VARCHAR -
author INTEGER FOREIGN KEY

Um einen Index zu erstellen, benötigt Sphinx zwingend einen 32-Bit-Integer-Wert als ID. Dafür prädestiniert ist der Primärschlüssel aus obiger Tabelle. Da Sphinx eine Volltextsuche darstellt, braucht man natürlich auch Textinhalte, die für die Suche indiziert werden sollen. In diesem Falle können die Felder headline und text dafür verwendet werden. Die übrigen Felder werden später sogenannte Attribute, nach denen Sphinx weiter sortieren und gruppieren kann.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
source Quellenname {
    type           = mysql
    sql_host       = localhost
    sql_user       = USERNAME
    sql_pass       = PASSWORD
    sql_db         = DATENBANKNAME
    # sql_port     = 3306

    # Die folgende SQL-Query wird von Sphinx benutzt, um den Index zu erstellen.
    # Hier werden also alle gewünschten Felder angegeben, die in der späteren Suche berücksichtigt
    # werden sollen.
    sql_query      = SELECT id, headline, UNIX_TIMESTAMP(publicationDate), text, author \
                     FROM news

    # Hier werden die sogenannten Attribute definiert. Diese werden nicht mit in die Volltextsuche einbezogen,
    # ermöglichen es aber, weiter nach diesen Feldern zu sortieren (zB. nach Autor)
    sql_attr_uint      = author
    sql_attr_timestamp = publicationDate

    # Diese SQL-Query bestimmt die Ausgabe des Kommandozeilentools zur Suche.
    # $id ist ein Makro und wird durch die IDs ersetzt, die zum Suchergebnis passen.
    sql_query_info    = SELECT headline, publicationDate, text FROM news WHERE id=$id
}

Konfiguration eines Index

Hier wird nun der eigentliche Index konfiguriert. Der Index wird auf der Festplatte abgelegt und stellt die Datenbasis der Suche dar. Indiziert werden nur die Felder, die vom Typ her Text enthalten. Alle anderen Attribute können nicht indiziert werden. Je nach Konfiguration werden die Attribute mit dem Index in eine Datei geschrieben oder in einer externen Datei vorgehalten. Der Vorteil der externen Speicherung ist, dass durch Cachen der Attribute im RAM die Suche bei großen Indizes schneller ist.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
index Indexname {
    # Jeder Index benötigt mindestens eine Datenquelle. Werden mehrere Datenquellen angegeben, so werden sie nacheinander indiziert.
    source = Quellenname
    source = weiterer Quellenname

    # Der Index wird an diesem Ort gespeichert werden. Dieser Pfad muss existieren.
    path      = /var/lib/sphinxsearch/data/NewsIndex

    # Die Attribute werden hier extern gespeichert, um die bestmögliche Geschwindigkeit zu erzielen
    docinfo   = extern

    # Hier kann angegeben werden wie lang das Suchwort minimal sein muss.
    min_word_len  = 2

    # Zuletzt noch den Zeichensatz festlegen.
    charset_type  = utf-8
}

Weitere Konfigurationen

Achtung!

Die in der Standardkonfiguration vorhandenen Abschnitte indexer settings und searchd settings sollten Anfänger nicht ändern.

Den Index anlegen

Die Grundkonfiguration ist nun abgeschlossen. Jetzt kann man mittels des Programmes indexer den Suchindex anlegen[3].

sudo indexer --all 

Durch diesen Befehl werden nun alle Indizes angelegt. Die Ausgabe könnte in etwa so aussehen:

Sphinx 0.9.9-release (r2117)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'news'...
collected 123294 docs, 8.4 MB
sorted 1.1 Mhits, 100.0% done
total 123294 docs, 8439361 bytes
total 3.738 sec, 2257163 bytes/sec, 32975.80 docs/sec
total 2 reads, 0.052 sec, 4780.4 kb/call avg, 26.1 msec/call avg
total 24 writes, 0.077 sec, 969.1 kb/call avg, 3.2 msec/call avg

Der Search-Daemon searchd

Der Suchdienst ermöglicht es APIs, Sphinx zu benutzen, um die Suche z.B. aus PHP oder Ruby-Skripten zu verwenden. Für einige Sprachen gibt es schon vorgefertigte APIs. Um den Suchdaemon zum Systemstart zu laden, muss die Datei /etc/default/sphinxsearch bearbeitet und der Parameter START auf yes gesetzt werden.[3]

1
2
3
4
    # Should sphinxsearch run automatically on startup? (default: no)
    # Before doing this you might want to modify /etc/sphinxsearch/sphinx.conf
    # so that it works for you.
    START=yes

Testen der Konfiguration

Nun ist der Suchindex bereit und man kann mit der Suche beginnen.

search Suchbegriff 

Bei der Suche nach dem Suchbegriff werden nun alle Ergebnisse so angezeigt, wie sie oben in der Datenquelle durch sql_query_info definiert wurden.

Weitere Möglichkeiten

  • Sphinx bietet viele Möglichkeiten, die Suche einzugrenzen und die Ergebnisse zu sortieren und zu gruppieren.

  • Mit der SphinxSE, einer MySQL Storage Engine, lässt sich die Suche auch über MySQL steuern. Dadurch benötigt man für andere Sprachen auch keine eigene API mehr

  • Um die vollen Möglichkeiten von Sphinx auszuschöpfen, empfiehlt es sich, die Dokumentation zu lesen.

Diese Revision wurde am 18. März 2018 00:29 von BillMaier erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Server, Datenbank, Programmierung