W poprzedniej części "Zawody ze Sphinx-em. Co to jest? (cz. 1)" omówiliśmy podstawowe informację o silniku indeksującym Sphinx. Teraz pora pobrudzić sobie ręce. Więc zaczynamy!
Instalacja
UNIX
- Ściągamy plik instalacyjny ze strony http://sphinxsearch.com/downloads/
-
Rozpakowujemy plik i wydajemy polecenia:
./configure make sudo make install
Domyślnie program instaluje się z obsługą MySQL, ale jeśli chcemy np. zainstalować obsługę PostreSQL, musimy go skonfigurować z flagą
--with-pgsql
WINDOWS
Jeśli instalujesz Sphinx-a na Windowsie, jedyne co musisz do ściągnąć instalator i zainstalować program.
Konfiguracja
Żeby zbudować choć podstawową wyszukiwarkę musimy mieć jakieś dane, więc musimy stworzyć tabelę i wypełnić ją rekordami.
CREATE TABLE tabela_panstwa ( `id` int(11) NOT NULL auto_increment, `kod` varchar(2) COLLATE utf8_unicode_ci NOT NULL, `kod3` varchar(3) COLLATE utf8_unicode_ci NOT NULL, `nazwa` varchar(255) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`kod`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; insert into table_panstwa (kod,kod3,nazwa) values ('AD','AND','Andora'); insert into table_panstwa (kod,kod3,nazwa) values ('AF','AFG','Afganistan'); insert into table_panstwa (kod,kod3,nazwa) values ('AG','ATG','Antigua i Barbuda'); insert into table_panstwa (kod,kod3,nazwa) values ('AI','AIA','Anguilla'); insert into table_panstwa (kod,kod3,nazwa) values ('AL','ALB','Albania'); insert into table_panstwa (kod,kod3,nazwa) values ('AM','ARM','Armenia'); insert into table_panstwa (kod,kod3,nazwa) values ('AN','ANT','Antyle Holenderskie'); insert into table_panstwa (kod,kod3,nazwa) values ('AO','AGO','Angola'); insert into table_panstwa (kod,kod3,nazwa) values ('AQ','ATA','Antarktyda'); insert into table_panstwa (kod,kod3,nazwa) values ('AR','ARG','Argentyna'); insert into table_panstwa (kod,kod3,nazwa) values ('AS','ASM','Samoa Amerykańskie'); insert into table_panstwa (kod,kod3,nazwa) values ('AT','AUT','Austria'); insert into table_panstwa (kod,kod3,nazwa) values ('AU','AUS','Australia'); insert into table_panstwa (kod,kod3,nazwa) values ('AW','ABW','Aruba');
Gdy ten etap mamy już za sobą, przejdźmy do konfiguracji naszego Sphinx-a, co tak naprawdę nie jest skomplikowane jeśli nie wymyślimy jakiś udziwnień.
source polaczenie_baza { type = mysql sql_host = localhost # adres serwera sql_user = root # login sql_pass = root # haslo sql_db = katalog # baza danych sql_port = 3306 } source idx_kraje : polaczenie_baza { sql_query = SELECT id, kod, kod3, nazwa FROM table_panstwa # zapytanie, które pobiera wyniki sql_query_info = SELECT id, nazwa FROM table_panstwa WHERE id=$id # zapytanie, które zwraca informacje o wybranych rekordach } # definiujemy indeks index idx_kraje { source = idx_kraje path = /usr/local/sphinx/data/idx_kraje docinfo = extern charset_type = utf-8 enable_star = 1 html_strip = 1 html_remove_elements = style, script min_word_len = 2 min_infix_len = 1 charset_table = 0..9, A..Z->a..z, a..z, \ U+0143->U+0144, \ U+0104->U+0105, \ U+0106->U+0107, \ U+0118->U+0119, \ U+0141->U+0142, \ U+00D3->U+00F3, \ U+015A->U+015B, \ U+0179->U+017A, \ U+017B->U+017C, \ U+0105, U+0107, \ U+0119, U+0142, \ U+00F3, U+015B, \ U+017A, U+017C, \ U+0144 # tutaj małe sztuczka potrzebna do indeksacji # polski znaków diakrytycznych } # ustawienia demona wyszukiwania searchd { port = 3312 #log = /usr/local/sphinx/log/searchd.log #query_log = /usr/local/sphinx/log/query.log read_timeout = 5 pid_file = /usr/local/sphinx/log/searchd.pid seamless_rotate = 1 preopen_indexes = 0 unlink_old = 1 }
Plikiem konfiguracyjnym programu jest plik sphinx.conf, powinien znajdować się z katalogu /usr/local/etc/sphinx.conf.
Jeśli mamy stworzony już plik konfiguracyjny trzeba stworzyć indeks:
/usr/local/sphinx/bin/indexer -all -c /usr/local/etc/sphinx.conf
następnie uruchamiamy demona:
/usr/local/bin/searchd -c /usr/local/etc/sphinx.conf
teraz możemy sprawdzić czy działa wyszukiwarka:
/usr/local/bin/search -c /usr/local/etc/sphinx.conf arg*
Podsumowanie
Mamy zainstalowanego i skonfigurowanego Sphinx-a, w następnej części przedstawię implementację API w PHP.