Sürekli içeriği büyüyen web sitesi içinde kapsamlı arama yapmak gün geçtikçe karmaşıklaştığı için bu soruna karşılık veren arama motorları geliştirilmiştir. Sphinx isimli arama motorunun kurulumunu ve CodeIgniter üzerine uygulanmasını bizlere Remzi Yüzüak anlattı. Yazının sonunda tüm anlatılan kodların bulunduğu dosyayı indirebilirsiniz.
Sphinx SQL, yazı tabanlı aramaları hızlı bir şekilde yapmanızı sağlayan bir arama motorudur. Bu yazıda Sphinx`i nasıl kuracağınız ve CodeIgniter ile bunu nasıl konuşturacağınızı en basit şekilde anlatacağım. Test platformumuz için Ubuntu kullandım ki versiyonu farketmiyor sadece Sphinx`in hangi versiyonunu kurduğunuzu bilin yeterlidir. Bunu farklı bir Linux versiyonuyla da deneyebilirsiniz. Sadece Sphinx`in data klasörüne dikkat etmelisiniz.
Komut satırından aşağıdaki kodu çalıştırabilir:
#sudo apt-get install sphinxsearch
Ya da Software Center`ı açıp `sphinx` şeklinde arattığınızda `sphinxsearch` başlıklı açıklamasında da `Fast standalone full-text SQL search engine` yazan paketi kurmalısınız.
Kurulumdan hemen sonra örnek config dosyasını sphinx.conf olarak kopyalayınız.`sphinx.conf.dist` ya da bunun `sphinx.sample.com` versiyonları olabilir. Hepsi aynıdır. Bu işlem için komut aşağıdadır:
#cp /etc/sphinxsearch/sphinx.conf.dist /etc/sphinxsearch/sphinx.conf
Config dosyasını oluşturduktan sonra içinde bulunan test1 araması için bir kaç ayar yapmalısınız. Ama öncelikle test database`inde basit bir tablo açıp içine veri girelim. Bunun için phpmyadmin ya da farklı bir sql prgramı ile test database`i oluşturup aşağıdaki ZIP paketindeki documents.sql dosyasını import edin.
Başlangıç için config dosyanızda (sphinx.conf dosyası) fazla değişiklik yapmadan sadece source src1{} içindeki database bilgilerinizi değiştiriniz.
sql_host= localhost sql_user= username sql_pass= *********** sql_db = test
index test1{} içindeki path alanınız /var/lib/sphinxsearch/data/test1 ise çalışacaktır. Aşağıdaki ZIP paketindeki örnek sphinx.conf isimli config dosyasını database username ve password`u değiştirdikten sonra kullanabilirsiniz.
Sphinx için son işlem indexlemesi için aşağıdaki komutu çalıştırın aşağıdaki gibi çıktı verdiyse herşey yolunda demektir.
#indexer --rotate test1 Sphinx 0.9.8.1-release (r1533) Copyright (c) 2001-2008, Andrew Aksyonoff using config file `/etc/sphinxsearch/sphinx.conf`... indexing index `test1`... collected 4 docs, 0.0 MB sorted 0.0 Mhits, 100.0% done total 4 docs, 193 bytes total 0.133 sec, 1446.89 bytes/sec, 29.99 docs/sec rotating indices: succesfully sent SIGHUP to searchd (pid=1086).
Eğer sphinx çalışmıyor ise durumuna bakıp servisi başlatın.ilk komut ile versiyonlarınızıda kontrol edebilirsiniz:
# sudo /etc/init.d/sphinxsearch status # sudo /etc/init.d/sphinxsearch start
Şimdi işin keyifli tarafı CodeIgniter`a gelelim. Ben bu dokumantasyonu hazırlarken CodeIgniter 2.1.0 ile Sphinx 0.9.8.1 versiyonuna göre sphinxapi.php dosyasını indirip hazırladım . Eğer farklı versiyon bir Sphinx kurmuşsanız buradaki adresten versiyona göre api indirip siz de benim yaptığım işlemleri yapabilirsiniz. Böyle bir durum ile karşılaşırsanız `warning` kısmında şuna benzer ibr mesaj görürsünüz : `client version is higher than daemon version(client is v.1.23, daemon is v.1.19)`
Api`deki tanımlanmış define`lar ile bir Sphinx config`i tanımlayalım. Bunun için `/application/config/` dizininde `sphinx.php` dosyası oluşturun ve içine tanımlanmış define`ları ZIP paketinde örnek verilen application_config_sphinx.php dosyasındaki gibi ekleyiniz.
Api`deki class`ın üzerinde bulunan iki fonksiyonu alıp düzenli olması için bir helper yaratalım. `/application/helpers/` klasöründe `sphinx_helper.php` isimli bir dosya oluşturup ZIP paketinde örnek verilen application_helpers_sphinx_helper.php dosyasındaki gibi ekleyiniz.
Şimdi de `/application/libraries/` klasöründe `Sphinx.php` isimli bir dosya olşturun ve indirdiğimiz apinin class ile başlayan yerinden alıp ZIP paketinde örnek verilen application_libraries_Sphinx.php dosyasındaki gibi ekleyiniz.
Şimdi bir controller yazacağız. `/application/libraries/` `test.php` isimli bir dosya oluşturun ve ZIP paketinde örnek olarak verilen Dosya: application_controller_test.php dosyası içindekileri yazın:
<!--?php if ( ! defined(`BASEPATH`)) exit(`No direct script access allowed`);
class Test extends CI_Controller {
public function __construct()
{
parent::__construct();
$this--->load->library(`Sphinx`);
$this->load->helper(`sphinx`);
}
public function index()
{
$this->sphinx->SetServer("localhost", 3312);
$this->sphinx->SetMatchMode(SPH_MATCH_ALL);
$this->sphinx->SetLimits(0, 100); //Sphinx set limit
$this->sphinx->SetFilter(`group_id`, array(1,2)); //Sphinx set group_id filter
$sphinx["result"] = $this->sphinx->Query(``, `test1`); //Sphinx Query Result
$this->load->view(`sphinx_test`,$sphinx); //assign result to view
}
}
/* End of file test.php */
/* Location: ./application/controllers/test.php */
Son olarak da bir view dosyası yazıp çıktıyı üretelim. `/application/views/` klasöründe `sphinx_test.php` isimli bir dosya oluşturup ZIP paketinde örnek olarak verilen application_views_sphinx_test.php dosyası içindekileri ekleyin:
<!--?php print_r($result["matches"]);?-->
Hata almamanız için `/application/config/` de bulunan `routes.php` deki default controlleri değiştirebilirsiniz:
$route[`default_controller`] = "test";
Kodu çalıştırmak istediğinizde url`niz : http://localhost/test/CI_sphinx/
Eğer kodunuz çalışmış ise querylerinizi tablolarınızı geliştirip CodeIgniter üzerinden Sphinx`i kullanmaya devam edebilirsiniz. Ancak şu tavsiyede bulunabilirim: mümkün olduğunca basit örnekler üzerinden gidip temelini aldıktan sonra büyük tablolara giriş yapın. Bu kaynak basitçe yapıyı anlamanıza imkan verecektir.
Uygulamada anlatılan tüm dosyaları buradan indrebilirsiniz.
Remzi Yüzüak
Yazarı : Fatih BAZMAN | Yorum Ekle | Etiketler : Sphinx Uygulama Kurulum
Türkiye