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.
