[Yii Framework] Membuat Search Engine Dengan Apache Solr

Sebelumnya saya telah posting tentang “How to index data to Apache Solr” disini. Sekarang permasalahannya adalah bagaimana membuat fitur pencarian “search” dari data yang telah kita index tadi.. Sebelumnya saya harap anda mengerti terlebih dahulu konsep kerja Apache Solr agar tidak kebingunga..

Okeh, setelah anda telah berhasil melakukan indeks data seperti tutorial sebelumnya sekarang buatlah sebuah actionSearch pada suatu controller anda. Jangan lupa terlebih dahulu untuk memanggil fungsi dari PHP-Solr-Client untuk menghubungkan antara Apache Solr dengan PHP :

Yii::import('application.tambahan.*');
require_once('SolrPhpClient/Apache/Solr/Service.php');

Sebelumnya perlu saya jelaskan bahwa menu pencarian dengan apache solr dapat dilakukan dengan langsung mengakses Link nya secara langsung dari solr tersebut dengan Web Service (REST), tetapi yang akan saya gunakan adalah dengan menggunakan fungsi-fungsi penunjang pada SolrPhpClient..

Lalu buatlah sebuah actionSearch pada controller anda :

public function actionSearch()
 {
   $model=array(new Search);
   $result;
   if(isset($_GET['keyword']))
   { 
      $solr = new Apache_Solr_Service('localhost', 8983, '/solr');

      if ($solr->ping())
      {
         try
         { 
           $offset = 0;
           $limit = 10;

           $queries = array('subject:'.$_GET['keyword'].'^2 title:'.$_GET['keyword'].'^4',);
           foreach ( $queries as $query )
           {
               $response = $solr->search($query, $offset, $limit);
               if ($response->getHttpStatus() == 200 )
               { 
                  if ($response->response->numFound > 0 )
                  {
                       $i=0;
                       foreach ( $response->response->docs as $doc )
                       {
                           $model[$i]->id=$doc->id;
                           $model[$i]->category=$doc->category;
                           $model[$i]->subject=$doc->subject;
                           $model[$i]->title=$doc->title;
                           $i++;
                       }
                  }
               }
               else{echo $response->getHttpStatusMessage();}
            } 
          }
          catch(Exception $e){echo $e->getMessage();}
       } 
   }
   $this->render('search',array('model'=>$model));
 }

Penjelasan : Pada contoh di atas, saya menangkap inputan user(keyword) dari menu pencarian. Setelah itu kita lakukan query pada apache solr, kemudian hasilnya saya simpan dalam sebuah array sebuah model bernama “Search”. Dan setelah itu, kita kirim nilainya ke tampilan kita guna ditampilkan pada user. Lalu buatlah tampilan seperti berikut untuk menampilkannya :

<?php foreach($model as $i => $aa): ?>

<div class="view">
 <h4><?php echo CHtml::link(CHtml::encode($aa->title), array($aa->category.'/view', 'id'=>$aa->id)); ?></h4>
 <?php echo '<br/>' ?>
</div>

Selesai…

Selamat mencoba…

Semoga membantu.. 😀

Advertisements

[Yii Framework] Membuat Index Data Pada Apache Solr

Sebelumnya saya pernah memaparkan perkenalan dengan apache solr. Nah, sekarang saya akan menjelaskan step-step untuk melakukan index data apache solr pada Yii Framework. Okehh, tidak berbeda dengan menggunakan code PHP biasa kok, pertama-tama kita harus meng-include file Solr PHP Client untuk menghubungkan antara aplikasi kita dengan apache solr. Caranya adalah masukkan kode berikut pada controller tempat anda mengiput kode index apache solr :

Yii::import('application.tambahan.*');
require_once('SolrPhpClient/Apache/Solr/Service.php');

Yah, setelah itu buatlah setelah action tempat kita akan memasukkan kode membuat index pada apache solr. Nah, berikut kode membuat index data baru pada apache solr tersebut :

$solr = new Apache_Solr_Service('localhost', 8983, '/solr');
 if ($solr->ping())
 {
    try
    { 
       $doc = new Apache_Solr_Document();
       $doc->namaAttribute1 = 'isi attribute1';
       $doc->namaAttribute2 = 'isi attribute2';
       $solr->addDocument($doc); //Menambahkan dokumen
       $solr->commit(); //commit untuk melihat perubahan
       $solr->optimize(); //menggabungkan beberapa segmen menjadi satu sehingga efektif. 
    }
    catch(Exception $e)
    {
       echo $e->getMessage();
    }
 }

Penjelasan : pertama-tama kita mendefinisikan Apache Solr yang akan kita akses termasuk mendefinisikan port apache solr tersebut bekerja. Lalu aplikasi akan mengecek apakah sudah terhubung antara aplikasi dengan apache solr. Jika sudah terhubung, maka akan dibuat dokumen apache solr baru yang kemudian akan dimasukkan 2 buah attribute di dalamnya beserta nilainya(tidak harus 2 attirbute, ini sesuai dengan kebutuhan anda). Kemudian setelah di tambahkan attribute-attribute tersebut, maka akan disimpan sementara di variabel tersebut nilai-nilainya lalu disimpan ke dalam index file apache solr.

Nah, contoh kode yang ada di atas adalah kode untuk membuat index data baru. Apabila ingin melakukan delete index, anda dapat membuat kodenya seperti berikut :

 $solr = new Apache_Solr_Service('localhost', 8983, '/solr');
 if ($solr->ping()) 
 {
     try 
     {
        $solr->deleteByQuery('id: hhuu');
        $solr->commit();
        $solr->optimize();
     } 
     catch ( Exception $e ) 
    {
       echo $e->getMessage();
    }
 } 
else 
{
   echo "Connecting to solr failed....<br>";
}

Selesai.. selamat mencoba..

Semoga membantu… 😀

%d bloggers like this: