| 
11.02.2007
 | 
23:25

Sphinx-Search Engine mit MySQL unter Ubuntu

Sphinx ist ein extrem interessanter Ansatz für alle, denen die Volltextsuche von MySQL zu eingeschränkt ist. Hier erkläre ich, wie man Sphinx unter Ubuntu zum Laufen bekommt.

Edit: weitere/neuere Infos

Quellcode herunterladen, kompilieren und installieren

(Anmerkung: Die Versionsnummer können sich in der Zwischenzeit natürlich geändert haben – diese also beachten)

Zuerst brauchen wir den Quellcode, da dieser leider (noch?) nicht als Ubuntu-Paket verfügbar ist:

cd /usr/src
sudo wget www.sphinxsearch.com/downloads/sphinx-0.9.7-rc2.tar.gz
sudo tar xzf sphinx-0.9.7-rc2.tar.gz

Um das Ganze zu kompilieren, brauchen wir GNU make und gcc. Beide sind über ein Sammelpaket herunterladbar. Außerdem bemötigen wir für die SQL-Unterstützung das dev-Paket des MySQL-Clients:

sudo apt-get install build-essential libmysqlclient15-dev

Nun sollte die Installation recht einfach funktionieren:

cd /usr/src/sphinx-0.9.7-rc2
./configure
make
make install

Die Dateien wurden nach /usr/local/ geschrieben. Um Sphinx nun effektiv zu nutzen muss man folgende Schritte unternehmen.

Sphinx unter Ubuntu konfigurieren

Zuerst einmal muss man die Konfigdatei anpassen – hier kann ich wenig helfen, aber die Vorlage ist recht verständlich und man kommt mit ein wenig Experimentieren schnell zurecht. Man sollte die Vorlage kopieren und diese anpassen:

sudo cp /usr/local/etc/sphinx.conf.dist /usr/local/etc/sphinx.conf
sudo gedit /usr/local/etc/sphinx.conf

Um Sphinx als Dienst laufen zu lassen, kann man eine init-Datei herunterladen, die ich vorbereitet habe und dise ins init.d-Verzeichnis legen:

wget www.auxnet.de/fileadmin/data/blog/searchd.gz
gunzip searchd.gz
sudo chown root.root searchd
sudo chmod 755 searchd
sudo mv searchd /etc/init.d/

Den Dienst kann man nun mit Hilfe von folgendem Kommando starten:

sudo /etc/init.d/searchd start

Vor dem Start habe ich eine Reindizierung eingebaut, damit der Dienst auch startet, falls keine Index-Dateien vorliegen. Dieses Verhalten kann man natürlich anpassen (im Skript).

Will man, dass Sphinx standardmäßig beim Systemstart startet, kann man das mit Hilfe der Runlevels einfach machen:


sudo update-rc.d searchd start 92 2 3 4 5 . stop 08 S 1 6 .

(S92 habe ich genommen, so dass der Dienst direkt nach Apache startet…)

MySQL Storage Engine nutzen (optional)

Man kann Sphinx auch als Storage Engine für MySQL nutzen. Dies ist dann interessant, wenn man z.B. mit JOINS die gefundenen Daten mit den Texten verknüpfen will, o.ä. Wer Sphinx extern (z.B. über die PHP-API) nutzt, benötigt diesen Schritt nicht extra.

Um das Ganze zum Laufen zu bringen, braucht man den Quellcode von MySQL und ein wenig Geduld…

Zuerst brauchen wir die Voraussetzungen zum Kompilieren von MySQL – nicht gerade wenig:

sudo apt-get install libtool debhelper libncurses5-dev libwrap0-dev \
zlib1g-dev libreadline-dev chrpath automake1.8 automake1.9 \
doxygen dpatch procps file perl psmisc po-debconf tetex-bin \
tetex-base tetex-extra gs gawk bison

(Bison ist hier wichtig, da Sphinx das zum Kompilieren benötigt, sonst bricht die Installation mit einem Fehler ab!)

Nun holen wir uns die Sources des mysql-servers (Sources müssen natürlich in /etc/apt/sources.list eingetragen sein):

sudo apt-get source mysql-server

Ok, diese müssen wir nun patchen:

cd mysql-dfsg-5.0-5.0.24a
sudo patch -p1 < ../sphinx-0.9.7-rc2/mysqlse/sphinx.5.0.22.diff

Der Patch sollte glatt laufen, bis auf eine Stelle - diese müssen wir per Hand nachtragen:

sudo gedit sql/set_var.cc
Hier nach “csv” suchen und nach dieser Zeile folgende einfügen:
{"have_sphinx", (char*) &have_sphinx_db, SHOW_HAVE},

Nun den Storage Engine Quellcode kopieren:

sudo cp -ar ../sphinx-0.9.7-rc2/mysqlse sql/sphinx

Jetzt haben wir’s fast – nur noch dpkg sagen, dass wir den Storage Engine mitkompilieren wollen:

sudo gedit nano debian/rules
Hier nach “with-innodb” suchen und nach dieser Zeile folgende einfügen:
--with-sphinx-storage-engine \

Jetzt ist alles bereit… gestartet wird die Installation mit:

sudo dpkg-buildpackage

Ok, jetzt sollte alles fehlerfrei durchlaufen – das Kompilieren dauert auch auf einem modernen Dual-Core-Rechner eine Weile. Man kann also einen schnellen Kaffee trinken gehen :-)

Wenn alles glatt gelaufen ist dann zurück in’s /etc/src-Verzeichnis und das Paket installieren:

cd ..
sudo dpkg -i mysql-server-5.0_5.0.24a-9_i386.deb

Falls man MySQL noch nicht installiert hat, muss man evt. noch andere Pakete mitinstallieren, die ebenfalls im /usr/src-Verzeichnis zu finden sind…

Ob alles geklappt hat, sieht man, wenn man sich mit mysql einloggt und folgenden Befehl ausführt:
SHOW ENGINES;

Es müsste dann eine Zeile mit SPHINX und Support YES kommen.

Viel Spaß damit!

  •  
  • Trackback
  •  
ownport.net
08.06.2008
20:56
sphinx-search configuration (ubuntu)

[...] Original post [...]...

  •  
  • 13 Kommentare
  •  
Gravatar: RobertRobert
28.06.2007
17:23

Allgemeine Anleitung für Sphinx

Weniger auf Ubuntu abgestimmte aber ebenfalls deteilreiche Anleitung für Installation, Konfiguration und Betrieb gibt es bei mir (http://robert.kolatzek.org/blog/article.php/Sphinx_Search_Engine_Installation_Konfig). Dein Artikel war meine Inspiration.

Gravatar: Charles Dupin de Saint CyrCharles Dupin de Saint Cyr
27.06.2008
05:26

instructions

Hallo Max…
…und danke viel fur dieses “instructions”. Mein Deutsch is uber-haupt-schelcht, aber ich verstehe’s alles.
Yets die ubuntu source code von mysql ist 5.0.51, und das “patch” functioniert nich: und sphinx hat kein “patch” fur 5.0.51.
:-D

OK, ich wurde ein andere solution finden…
Danke und tchuss!
Charles der franzose

Gravatar: MaxMax
27.06.2008
11:39

Versionen...

Danke Charles,
es sollte auch mit einer älteren Version funktionieren – Sphinx 0.9.8-rc2 läuft bei mit unter MySQL 5.0.51a. Die MySQL-API hat sich nicht wesentlich verändert, denke ich…
Viele Grüße,
Max.

Gravatar: Charles Dupin de Saint CyrCharles Dupin de Saint Cyr
27.06.2008
21:54

mysql_5.0-5.0.24a

Ah Max, Ich habe ein website finden mit das mysql_5.0-5.0.24a archiv:
Vor das patch konnen sie hier die archiven finden:
# wget https://launchpad.net/ubuntu/edgy/+source/mysql-dfsg-5.0/5.0.24a-9/+files/mysql-dfsg-5.0_5.0.24a-9.dsc
# wget https://launchpad.net/ubuntu/edgy/+source/mysql-dfsg-5.0/5.0.24a-9/+files/mysql-dfsg-5.0_5.0.24a-9.diff.gz
# wget https://launchpad.net/ubuntu/edgy/+source/mysql-dfsg-5.0/5.0.24a-9/+files/mysql-dfsg-5.0_5.0.24a.orig.tar.gz
und dann de-package das source:
# dpkg-source -x mysql-dfsg-5.0_5.0.24a-9.dsc
Dann fahren Sie mit Ihrer soluzion (patch etc…)
Aber mit der package habe ich einer feller:
dpkg-shlibdeps: failure: couldn’t find library libndbclient.so.0 needed by debian/mysql-server-5.0/usr/sbin/ndb_mgmd (its RPATH is ”).
Note: libraries are not searched in other binary packages that do not have any shlibs or symbols file.
To help dpkg-shlibdeps find private libraries, you might need to set LD_LIBRARY_PATH.
dh_shlibdeps: command returned error code 512
make: *** [binary-arch] Error 1
dpkg-buildpackage: failure: debian/rules binary gave error exit status 2
hum… habe ich noch einige arbeit zum tun.
Charles der franzose

Gravatar: MaxMax
31.07.2008
16:49

Debian-Paket für Sphinx

Unter http://www.auxnet.de/blog/blog-post/2008/07/31/sphinx-search-engine-in-ubuntu-mit-hilfe-von-launchpad-installieren.html steht jetzt, wie man Sphinx als deb-Paket installieren kann.

Gravatar: MaxMax
19.06.2009
07:32

Debian-Paket

Auf der Sphinx-Seite selbst steht ein Artikel, wie man den Search Engine in ein Debian-Paket packt.
http://sphinxsearch.com/wiki/doku.php?id=sphinx_on_debian_gnu_linux
Max.

Gravatar: MaxMax
11.07.2009
16:11

Git-Repository für Debian-Sphinx

Man kann sphinx auch mit Hilfe von git debianisieren. Das Projekt befindet sich unter: http://github.com/johnl/deb-sphinx-search/
Eine kleine Anleitung zum Installieren findet man am Ende der folgenden Wiki-Seite:
http://wiki.github.com/mkalus/histcross/installing-histcross-on-linux

Gravatar: RobertRobert
24.01.2010
20:51

Neue URL des alten Artikels

Hallo zusammen!



Hier ist die neue URL:

http://robert.kolatzek.org/wblog/34/sphinx-search-engine-installation-und-betrieb-eine-einleitung



Habe bei der Umstellung leider nicht an Backlinks gedacht...

Gravatar: MaxMax
24.01.2010
22:09

Re: Neue URL des alten Artikels

Danke für die Nennung! Guter Beitrag übrigens :-)



Mx.

Gravatar: SebastianSebastian
29.03.2010
18:16

searchd.gz

Hi,



dein Link zur searchd.gz funktioniert leider nicht mehr.



Gruß, Sebastian

Gravatar: MaxMax
03.04.2010
21:14

Link zu searchd.gz

Hallo Sebastian,



danke für den Hinweis. Ich habe den Link korrigiert.



Max.

Gravatar: AdrianAdrian
14.03.2011
14:57

Beispiele

Hallo. Ich werde aus den Beispielen von Sphinx nicht schlau. Die Dokumentation ist auch verwirrend (ebendso die configs).



Wie nun erstelle ich mein eigenes "Suchscript" mittels PHP?

Es gibt nirgendwo richtige beschreibungen dafür, nur die englsiche doku.



Was ich möchte: Ich habe eine Nutzertabelle die ich gerne auslesen möchte und halt eine benutzersuche realisieren. Man merke sich, diese hat 7 Mio Namen, bei MATCH bzw LIKE dauerts bei MySQL viel zu lange - Deswegen wollte ich Sphinx ausprobieren.



Wie kann ich nun eine Tabelle mittels Sphinx auslesen?

Beispielformat: SELECT id, nickname, seite FROM benutzer WHERE nickname LIKE '%girl%'. Wie bekomme ich das hin?



Reicht es einfach, die statements so beizubehalten und nur als MySQL Engine Sphinx zu wählen`?

Gravatar: MaxMax
15.03.2011
12:58

Re: Beispiele

Nun ja, du wirst nicht umhin kommen, die Config und die Doku genau zu studieren. Sphinx ist eine externe Suchmaschine. Du musst die Daten zuerst von Sphinx indizieren lassen. Dazu benötigst du die Konfiguration und den Indexer. Erst dann kannst du die Daten mit Hilfe einer API per PHP auslesen. Du bekommst die Treffer und die Ids zurück, die du dann per Datenbank-Queries wiederum mit den "Originaldaten" verlinken kannst.



Externe Suchmaschinen sind eben leider nicht mit einfachen Datenbankabfragen zu vergleichen - du fragst die Daten über eine eigene Schnittstelle ab.



Ich hoffe das hilft ein wenig weiter,

Max.

Mein Kommentar
Ich möchte über jeden weiteren Kommentar benachrichtigt werden.

Zurück