[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..😀

Leave a Reply

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 / Change )

Twitter picture

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

Facebook photo

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

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: