Žymės įrašai

Rugpjūtis21

Sphinx su lietuvišku stemmer'iu diegimas (Komentarai 799)

Žymės: php,sphinx

Pasidalink!

Sphinx

Sphinx yra atviro kodo teksto paieškos variklis.

 
Nors viena pagrindinių Sphinx savybių yra greitis, taip pat teigiama savybė yra indekso sudarymas, nukarpant žodžių galūnes (stemming).
Tai leidžia vykdant paiešką rasti žodžius, neatsižvelgiant į galūnę.
Pavyzdžiui, indekse žodis stalas bus pakeistas žodžiu stal, ir vykdant paiešką dokumentas bus rastas pagal užklausas stalus, stalą ir pan.
 
Įprastai Sphinx gali būti įdiegiamas iš repozitorijos, tačiau kadangi stemmer'is nėra standartinis Sphinx funkcionalumas, o yra naudojama Snowball Libstemmer biblioteka, ją reikia kompiliuoti atskirai.
Taip pat lietuvių kalbos stemmer'io standartinėje konfigūracijoje nėra, norint jį naudoti teks kompiliuoti tiek Libstemmer'į, tiek patį Sphinx'ą.
 

Pradedam :)

 
Mums reiks šių programų (galima įdiegti iš repozitorijos: mano atveju, naudojant Ubuntu - sudo apt-get install <paketas>):
 
  • make
  • g++ arba gcc kompileris
  • mysql-client
  • libmysqlclient-dev (arba mysql-devel kitose distribucijose)
 
Parsisiunčiame Sphinx source'ą iš http://sphinxsearch.com/downloads/ (konkrečiu atveju 2.0.8 versiją)
 
Į libstemmer_c direktoriją parsiunčiam Libstemmer C versiją iš https://github.com/plutzilla/sphinx-libstemmer (git clone git@github.com:plutzilla/sphinx-libstemmer.git .) arba repozitorijos fork'o.
 
Libstemmer atskirai kompiliuoti nebūtina, tačiau ją sukompiliavus (make), kartu sukompiliuojama stemwords programa. Ja galima patikrinti, kaip veikia stemmer'is. Pvz.:
./stemwords -l lt
stalas
stal
stalą
stal
 
Žinoma, yra žodžių, kurie bus paverčiami neadekvačiai, pvz.:
./stemwords -l lt
šienas
š
 
Toliau konfigūruojame Sphinx:
 
./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib/mysql --with-libstemmer
 
Standartiškai Sphinx bus instaliuojamas į /usr/local. Norint instaliuoti kitoje direktorijoje, galima nurodyti --prefix=/kelias/iki/sphinx
 
Kompiliuojame Sphinx su komanda make. Instaliuojame naudodami sudo make install.
 
Norėdami naudoti Sphinx iš kitos programavimo kalbos, turime sukonfigūruoti ir suinstaliuoti biblioteką:
 
cd api/libsphinxclient
./configure
make install
 
Jei naudosime Sphinx su PHP programavimo kalba, reikia įdiegti sphinx PECL biblioteką (extension):
 
pecl install sphinx
 
Kad galėtume įdiegti bibliotekas iš PECL repozitorijos, reikia prieš tai būti įdiegus paketus php-pecl ir php5-dev
 
Instaliavus sphinx PECL biblioteką reikia php.ini faile nurodyti extension=sphinx.so bei perkrauti PHP (jei veikia kaip mod_php, perkrauti Apache; jei kaip FastCGI, perkrauti FastCGI ar FPM servisą).
 
Kad Sphinx (searchd servisas) užsikrautų užkrovus OS bei kad galėtume jį sustabdyti/perkrauti, patogu turėti Init skriptą - sukuriame failą /etc/init.d/searchd su turiniu:
 
#!/bin/bash

case "${1:-''}" in
'start')
/usr/local/bin/searchd
;;
'stop')
/usr/local/bin/searchd --stop
;;
'restart')
/usr/local/bin/searchd --stop && /usr/local/bin/searchd
;;
*)
echo "Usage: $SELF start|stop|restart"
exit 1
;;
esac
 
Jei sphinx konfigūracijos failą laikysime ne standartinėje vietoje (/usr/local/sphinx/etc/sphinx.conf) galime nurodyti parametrą --config </kelias/iki/sphinx.conf>
 
Taip pat jei sphinx paleisime ne root vartotoju, galima searchd iškviesti (įtraukti į init skriptą) per komandą:
 
su - <unix-vartotojas> -c "/usr/local/bin/searchd --config /kelias/iki/sphinx.conf"
 
sukūrę init skriptą, suteikiame jam vykdymo teises ir atnaujiname rc.d konfigūraciją:
 
sudo chmod +x /etc/init.d/searchd
sudo update-rc.d searchd defaults
 
Norint naudoti lietuvišką stemmer'į, Sphinx konfigūracijos faile aprašant indeksą reikia nurodyti:
 
morphology = libstemmer_lt
 
Taip pat naudinga lietuviškas raides paversti lotyniškomis. Tam prie indekso galime nurodyti:
 
charset_table     = 0..9, A..Z->a..z, _, a..z, \
    U+104->a, U+105->a, \
    U+10C->c, U+10D->c, \
    U+116->e, U+117->e, \
    U+119->e, U+11A->e, \
    U+12E->i, U+12F->i, \
    U+160->s, U+161->s, \
    U+16A->u, U+16B->u, \
    U+172->u, U+173->u, \
    U+17D->z, U+17E->z
 
Kaip naudotis Sphinx, aprašyti indeksus bei indeksuoti duomenis, galima rasti Sphinx dokumentacijoje http://sphinxsearch.com/docs/ arba manual'uose (man search, man searchd, man indexer).
 
Didelis dėkui lt stemmer (http://sourceforge.net/projects/ltstemmer/) iniciatyvai bei Linui Valiukui (https://github.com/pypt)

 

« 1 »

Žymės RSS Žymės RSS