SPHINX ; Veritabanı ile ortak çalışan bir arama motorudur. (Full Text Search Engine) Veritabanından belirli periyotlar da bilgileri çekerek indexler. Arama yapmak istediğimizde, SQL yerine SPHINX üzerinden arama yaparız. Kendi indexlediği kayıtlardan bize sonuç döndürür. Böylece veritabanının yükünü hafifletmiş oluruz.
Temel Bilgiler ;- Mysql-Postgresql veritabanları ile çalışır.
- C++ ile geliştirilmiştir.
- Birçok dil için API desteği var (Php-Python-Java ve benzeri)
- Ölçeklenebilir, hızlı ve pratik
SPHINX KURULUM
- Resmi web sitesinden, kullandığımız linux türü için uygun paketi indiriyoruz. Ben REDHAT 6 için olan paketi kullanacağım : sphinxsearch.com/downloads/beta/
- İndirilen "rpm" paketini kuruyoruz.
- Sonra "yum search sphinx" diyerek aratıp, "lib / client" yazan paketi kurarız.
PHP KURULUM ve KULLANIM
- PHP'de Sphinx'i kullanabilmek için : "pecl install sphinx"
- PHP'de aktif olması için : "php_ini" içine extension olarak sphinx.so satırını eklemeliyiz. Sonrasında apache restart edip, phpinfo() ile kontrol edebiliriz.
- Örnek kod betiği için buraya, tüm özellikler için Sphinx - Php bölümüne bakılabilir.
SPHINX KULLANIM ve AYARLAR
Konfigürasyon Dosyası
vi /etc/sphinx/sphinx.conf
4 temel bölümden oluşur : - Source : Veritabanı ve SQL sorgu bilgileri
- Index : Bilgiler için index ayarları
- Indexer : Index parametleri
- Searchd : Arama parametleri
SPHINX Örnek bir proje ;
"OTEL" veritabanımız olsun,
"OTELLER" tablosunu sphinx üzerinden indexletip, kullanalım.
Conf dosyasını açıp, gerekli yerleri düzenleyelim ;source otel (KAYNAK BİLGİLERİ)
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
sql_db = otel
sql_port = 3306 # optional, default is 3306
sql_query = SELECT id,ad FROM oteller (INDEXLENECEK SORGU)
}
index otelarama (INDEX ANAHTARI)
{
source = otel (KAYNAK)
path = /var/lib/sphinx/arama (DOSYA YOLU)
docinfo = extern
charset_type = sbcs
}
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41
log = /var/log/sphinx/searchd.log
query_log = /var/log/sphinx/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinx/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = /var/lib/sphinx/
}
İki komutta direk konsolda kullanılabilir ;
- İndexleri oluşturması için : "indexer otelarama" (Komut düzenli olarak uygunlanmalıdır ya da crontab ile otomatik yaptırabiliriz )
- Arama yapmak için : search "türkiye otel"
NOT - 1 : İndexlenecek sorgu için mutlaka bir tane unique id olmalıdır.
NOT - 2 : Birkaç satırlık sorgu, ayar komutu yazacağımızda "\" işareti ile alt satıra geçmeli, yani birbirine bağlamalıyız.
NOT - 3 : Arama Sonucu : TEST - 100 documents, 150 hits
100 satırda "TEST" kelimesi ve bunun toplam da 150 kere bulunduğunu söyler.