Welcome to Abdul Malik Ikhsan's Blog

Zend Framework : Zend_Search_Lucene – Content Indexing

Posted in Teknologi, Tutorial PHP, Zend Framework by samsonasik on Agustus 8, 2011

Lucene adalah indexing dan retrieval library yang awalnya didevelop di teknologi Java, dan disupport oleh Apache Software Foundation. Ketika data sudah terindex dalam sistem file, maka tidak membutuhkan database server. Zend_Search_Lucene adalah salah satu komponen dari Zend Framework yang mengimplementasikan teknologi ini.  Zend_Search_Lucene support beberapa fitur :

1. Perangkingan hasil pencarian
2. Powerful query types : boolean, wildcard, phrase queries
3. pencarian dengan field spesifik

Ok, let’s go to example :
Anggaplah kita mempunyai data artikel yang akan kita simpan di index file sistem kita. Kita mempunyai controller yang memanggil komponen Zend_Search_Lucene sebagai berikut :

class TestluceneController extends Zend_Controller_Action
{
    public function init()
    {
        /* Initialize action controller here */
        $this->indexPath = APPLICATION_PATH.'/indexsearch/index';
    }
}

Dalam function init, kita deklarasikan path tempat menyimpan index kita. Kalau sudah, kita buat action untuk meng-index data dari database, semisal sebagai berikut :

//...................
public function reindexAction()
{
    // action body
    //just SAMPLE , access to db
    // ( in your REAL DEVELOPMENT, access to db is only in model ) !!!!
    //asumption , 'db' is already registered in registry !!!
    $db = Zend_Registry::get('db');
    $fetch = $db->query("select * from articles")->fetchAll();

    $index = Zend_Search_Lucene::create($this->indexPath);

    foreach($fetch as $key=>$row)
    {
        $doc = new Zend_Search_Lucene_Document();
        $doc->addField(Zend_Search_Lucene_Field::Text('title', $row['title']));
        $doc->addField(Zend_Search_Lucene_Field::UnStored('content', $row['content'] ));

        $index->addDocument($doc);
        echo 'Added ' . $row['title'] . ' to index.
';
    }
    //optimize index...
    $index->optimize();

    die;
}
//................................

Nah, action reindexAction kita jalankan dulu sebelum mencoba melakukan pencarian data. Kalau sudah, tinggal kita test deh :

//.......Pencarian data yang sudah terindex.
public function searchAction()
{
    $data  = array();

    // If a search_query parameter has been posted, search the index.
    $indexopen = Zend_Search_Lucene::open($this->indexPath);
     // Get results.
    $data  = $indexopen->find('"PHP framework" AND "Zend Framework"');
    foreach($data as $key=>$row)
    {
        echo $row->title; echo "<br>";
    }
    die;
}
//......................

Okeey, semoga bermanfaat :)
Referensi :
http://www.slideshare.net/shahar/content-indexing-with-zendsearchlucene
http://www.andrewrowland.com/article/display/using-zend-search-lucene-part-2
http://framework.zend.com/apidoc/1.0/Zend_Search_Lucene/Document/Zend_Search_Lucene_Document.html
http://framework.zend.com/manual/en/zend.search.lucene.overview.html

Satu Tanggapan

Berlangganan komentar dengan RSS.

  1. dadan said, on Januari 28, 2012 at 4:41 pm

    sip bagus sekali, sya jadi faham..terima kasih tutorialnya…


Tinggalkan Balasan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Ubah )

Twitter picture

You are commenting using your Twitter account. Log Out / Ubah )

Facebook photo

You are commenting using your Facebook account. Log Out / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 26 pengikut lainnya.