W artykule zatytułowanym SphinxSE - Sphinx Storage Engine przedstawiony został prosty i szybki sposób rozszerzenia funkcjonalności naszej aplikacji o możliwość wyszukiwania pełnotekstowego (ang. full-text search). Zostało to osiągnięte dzięki wykorzystaniu SphinxSE czyli opcjonalnemu sposobowi przechowywania wyników wyszukiwania w wirtualnej tabeli, na której można wykonywać operacje typu JOIN z istniejącymi w naszej bazie danych tabelami. Wspomniany na początku artykuł skupia się wyłącznie na składni oraz możliwości zapytań Sphinx Storage Engine, pomijając zupełnie krok włączenie obsługi ENGINE=SPHINX przez bazę danych.
INSTALL PLUGIN sphinx
Dodatkowy engine (jak choćby MyISAM, InnoDB, Memory itd. ) dla baz danych z rodziny MySQL (MySQL, MariaDB, Percona Server) dostarczany jest w postaci pluginu:
Jeśli instalacja pluginu przebiegła pomyślnie, na liście dostępnych silników powinien pojawić się SPHINX:
Następnie możemy przystąpić do utworzenia tabeli z ENGINE=SPHINX i rozpocząć full-text search zadając klasyczne zapytania SQL. Niestety w przypadku Percona-Server, nie wszystko jest takie proste…
ha_sphinx.so
Powyższy błąd spowodowany jest tym, że plugin do obsługi SphinxSE nie jest dostarczany razem z Percona Server (posiadają własną obsługę FTS), zatem konieczne jest przygotowanie takiej biblioteki we własnym zakresie.
Procedura kompilacji pluginu wygląda następująco:
1. przygotowanie katalogu roboczego
2. pobranie źródeł Percona-Server (wersja zgodną z tą z której korzystamy) oraz ich rozpakowanie
3. pobranie źródeł SphinxSearch oraz ich rozpakowanie
4. kopiowanie źródeł pluginu do obsługi SphinxSE do Percona-Server
5. kompilacja źródeł Percony i wygenerowanie biblioteki ha_sphinx.so
6. kopiowanie biblioteki do docelowej lokalizacji oraz instalacja pluginu
Ubuntu 14.04
Przedstawiona powyżej procedura bardzo dobrze sprawdziła się w przypadku środowiska Mac OS X Yosemite, ale niestety problemy wystąpiły w Ubuntu 14.04 (Percona-Server zainstalowany za pomocą apt-get):
Analiza tego błędu i fachowych porad doprowadziła mnie do przyczyny - plugin trzeba skompilować z dokładnie takimi flagami z jakimi przygotowana została dostarczona dystrybucja naszej wersji bazy danych. Aby móc podejrzeć parametry kompilacji konieczne jest pobranie źródeł
oraz wyszukiwanie parametrów kompilacji (cmake) w pliku percona-server-{$VERSION}/debian/rules
Wracając do naszej procedury kompilacji, kroki 1-4 są identyczne, natomiast w kroku 5 wykonujemy polecenie cmake z takimi parametrami z jakimi została skompilowana nasza baza danych, np.
Krok 6 jest identyczny tj. kopiowanie biblioteki a następnie instalacja pluginu.
Generalnie, włączenie obsługi SphinxSE jest bardzo proste. Jednak, w szczególnych przypadkach, może wymagać nieco więcej wysiłku (przygotowanie pluginu we własnym zakresie). Niemniej uważam, że i tak to jest stosunkowo niewielki koszt biorąc pod uwagę bardzo duże możliwości oferowane przez Sphinx Storage Engine oraz niski próg wejścia i mały zakres wprowadzonych zmian w bazowej wersji naszej aplikacji.
Przydatne linki:
- https://mariadb.com/kb/en/mariadb/about-sphinxse/
- http://sysmagazine.com/posts/161461/
- https://trac.macports.org/ticket/45136
- http://www.percona.com/doc/percona-server/5.6/installation/apt_repo.html
- http://www.digincore.org/index.php/blogi-razrabotchikov/entry/sphinxse-percona-mysql-ubuntu-debian
- https://github.com/dragolabs/dpkg-sphinx-se
- https://github.com/ruhllatio/dpkg-sphinx-se
- https://github.com/johnmarkg/percona-cluster-with-sphinx
- https://github.com/nZEDb/nZEDb/tree/master/misc/sphinxsearch
- http://forums.nzedb.com/index.php?topic=1755.0
- http://www.codefromaway.net/2012/02/setting-up-percona-galera-and-sphinxse.html
- http://www.nicovs.be/install-mysql-with-sphinx-search-engine-support/
- http://forums.mysql.com/read.php?94,260436,260436
- https://mariadb.com/kb/en/mariadb/sphinx-status-variables/
- http://sphinxsearch.com/forum/view.html?id=10238
- http://sphinxsearch.com/forum/view.html?id=10017
- http://sphinxsearch.com/forum/view.html?id=6862
- http://www.percona.com/blog/2013/02/26/myisam-vs-innodb-full-text-search-in-mysql-5-6-part-1/
tagi: ha_sphinx.so , mariadb , mysql , percona , plugin , sphinxse , sphinx , sphinxsearch