Membuat Search Engine Menggunakan PHP Swish 0.5.0 pada Ubuntu 12.04 / 12.10 / 13.04
SWISH-E adalah singkatan dari Simple Web Indexing System for Humans - Enhanced. Swish-e sendiri di bawah lisensi GPL, tetapi menggunakan klausul yang memungkinkan aplikasi untuk menghubungkan terhadap library jika setiap salinan dari dokumen disertai dengan URL ke Swish-e code.
PHP Swish menggunakan dua alat pengindeksan, Sphinx dan menggunakan Zend Framework Lucene. PHP Swish menggunakan fungsi yang disediankan oleh Swish-e untuk memanggil index yang telah dibangun sebelumnya. Check out daftar lengkap fiturnya disini.
1. Installasi PHP Swish versi 0.5.0
Installasi PHP Swish dilakukan dengan mendownload terlebih dahulu versi PHP-Swish disini atau langsung mengetikkan perintah di terminal dengan versi Swish 0.5.0. Untuk menginstal PHP Swish, dibutuhkan instalasi Swish-e terlebih dahulu seperti yang telah dibahas sebelumnya pada Instalasi Swish-E 2.4.7. Apabila Swish-e telah terinstal, maka dapat dilakukan tahapan berikut ini:
Setelah selesai didownload, kemudian masuk pada directory tempat file swish-0.5.0.tgz disimpan dan ektrak file tersebut menggunakan perintah
- ryan@Venom :~ wget http://pecl.php.net/get/swish-0.5.0.tgz
Setelah berhasil di ekstrak kemudian masuk pada directory swish (directory ini tergantung pada versi Swish )
- ryan@Venom :~ gzip -dc swish-0.5.0.tgz | tar xof -
untuk melakukan konfirgurasi pada config.m4.
- ryan@Venom :~ cd swish-0.5.0
Apabila error dapat dilakukan step berikut ini. Tetapi Apabila berhasil, maka file configure akan di ekstrak. Kemudian lakukan konfirgurasi file php swish
- ryan@Venom :~ phpize
Dan lakukan testing pada swish configuration menggunakan perintah
- ryan@Venom :~ ./configure
Kemudian akses ke root untuk melakukan proses instalasi
- ryan@Venom :~ make && make test
Setelah berada sebagai root kemudian lakukan penginstalan php swish dengan menggunakan perintah
- ryan@Venom :~ sudo su
Cari file php.ini, biasanya pada lokasi:
- root@Venom :~ make install
Kemudian tambahkan directory file swish.so pada akhir baris sesuai dengan lokasi dari directory file tersebut. Misalnya:
- root@Venom :~ vim /etc/php5/apache2/php.ini
Kemudian simpan dan restart kembali apache dengan perintah
- extension=/usr/lib/php5/20100525+lfs/swish.so
- extension=/usr/lib/php5/20121212/swish.so
Lihat pada php info apakah swish untuk PHP dapat dijalankan di localhost, misalnya : http://localhost/phpinfo.php. Apabila belum ada, tambahkan file phpinfo.php pada directory /var/www/
- root@Venom :~ /etc/init.d/apache2 restart
Tambahkan kode pada file tersebut
- root@Venom :~ vim /var/www/phpinfo.php
Kemudian simpan dan jalankan kembali http://localhost/phpinfo.php kemudian cari kata Swish, apabila proses instalasi extension berhasil maka akan tampil seperti pada gambar berikut:
- <?php
- // Show all information, defaults to INFO_ALL
- phpinfo();
- ?>
2. Rebuild PHP Swish Terhadap Error "phpize" Konfirgurasi
Apabila terdapat masalah ketika akan melakukan konfirgurasi PHP-Swish saat menjalankan konfirgurasi "phpize: command not found", kemungkinan PHP Dev belum terinstall dengan cara
- root@Venom :~ apt-get install php5-dev
kemudian kembali pada directory PHP Swish tersebut dan ulangi tahapan "phpize". Apabila masih belum bisa terinstal, kemungkinan terdapat kesalahan pada proses instalasi dari paket Swish-E. Hal ini dapat di antisipasi dengan mengkonfirgurasi ulang paket Swish-E seperti langkah-langkah sebelumnya yang telah dibahas pada tahapan dariInstalasi Swish-E 2.4.7.
Pastikan tidak terdapat error saat melakukan "make test", kemudian masuk kembali pada directory PHP Swish tersebut dan ulangi tahapan "phpize" hingga selesai.
3. Membuat Front-End Search Engine
Setelah semua tahapan penginstalan PHP-Swish telah selesai, maka tahapan selanjutnya membuat front-end menggunakan bahasa pemrogramman PHP dengan menggunakan extension swish. Proses ini untuk membaca isi dari file yang telah diindex sebelumnya menjadi informasi yang dapat dilakukan untuk pengolahan.
Dari gambar diatas, dapat dilihat dari proses inverted index hingga hasil yang ditampilkan dari proses front-end, dimana seluruh pencarian dilakukan menggunakan PHP-Swish melalui back-end.
Untuk melihat seluruh properties yang dimiliki dari file index.swish-e yang telah dibangun sebelumnya dapat dilihat informasinya dengan menggunakan code PHP berikut ini:
- <?php
- try
- {
- $swish = new Swish("index.swish-e");
- $properties = $swish->getPropertyList("index.swish-e");
- echo "Swish Properties : <br/>";
- foreach ($properties as $prop)
- {
- echo "<li>".$prop["Name"]."</li>";
- }
- }
- catch (SwishException $e)
- {
- echo $e->getMessage(), "\n";
- }
- ?>
Dari kode tersebut, dapat ditampilkan informasi properties yang dimiliki file index.swish-e adalah sebagai berikut:
Secara default, properties yang diindex hanya memiliki properties : swishreccount, swishrank, swishfilenum, swishdbfile, swishdocpath, swishtitle, swishdocsize, swishlastmodified dan swishdescription. Fungsi dari swishdocpath merupakan alamat dari file, swishrank merupakan nilai frekuensi yang paling relevan dari file, swishreccount urutan dari file berdasarkan rangking, swishlastmodified merupakan waktu modifikasi terakhir file dan juga swishtitle untuk menampilkan judul dari file. Sedangkan swishdescription hanya ikut diindex dalam file tersebut apabila dari proses melakukan konfirgurasi index menambahkan StoreDescription yang berfungsi untuk menampilkan deskripsi dari isi file.
Setelah semua properties dari file index sudah diketahui, maka tahap selanjutnya membuat front-end yang dapat membaca informasi dari file index.swish-e dengan menampilkan judul, alamat URL dan juga deskripsi seperti yang terdapat pada mesin pencarian yang ada saat ini. Buatlah sebuah file dalam directory /var/www/ dan buat sebuah directory misalkan "Search" kemudian buat sebuah file PHP kemudian tambahkan code PHP berikut:
- <html>
- <head>
- <title>Search Engine</title>
- <link rel="stylesheet" type="text/css" href="style.css">
- </head>
- <body>
- <?php
- if (!isset($_POST['q']))
- {
- ?>
- <h2>Search</h2>
- <form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
- <input type="text" name="q" size="30" />
- </form>
- <?php
- }
- else
- {
- ?>
- <h2>Search Results</h2>
- <?php
- try
- {
- $swish = new Swish('index.swish-e');
- $queryStr = htmlentities($_POST['q']);
- $start = microtime(true);
- $result = $swish->query($queryStr);
- $end = microtime(true);
- $fnum = $result->hits;
- $time = (round(($end-$start)*100,5)/100);
- if ($fnum==0)
- {
- echo "
- Sorry, there are no matching result for <b>$queryStr</b>.</br></br>
- 1. Try more general words.</br>
- 2. Try different words with similar meaning</br>
- 3. Please check your spelling
- ";
- }
- else
- {
- echo "<font color='grey'>$fnum Results Found ! ($time seconds)</font><br />";
- while($r = $result->nextResult())
- {
- $start = 0; //berfungsi untuk halaman
- $limit = 20; // maksimal yang ditampilkan
- $data = $r->swishreccount;
- $replace = ' ';
- if ($data >=$start && $data <=$limit) //limit halaman
- {
- $date = date("l, j F Y @ G:i:s", ($r->swishlastmodified)+60*60*7);
- $words = split("[ ]+", strtolower($queryStr));
- $text = substr($r->swishdescription,0,500);
- $url = $r->swishdocpath;
- $rank = $r->swishrank;
- $desc = $text;
- if ( !is_null($r->swishtitle) )
- {
- $title = $r->swishtitle;
- }
- else
- {
- $newtitle = explode('/', $r->swishdocpath);
- $order = array("-", "+" , "_",".pdf",".html",".php",".tar",".gz",
- ".rar",".zip",".ps",".txt",".tar.gz",".ps.gz",".txt.gz");
- $l = 0;
- while ($l < count($newtitle))
- {
- $loc = $l++;
- }
- if( strtolower($newtitle[$loc]) != "index.html" && !is_null($newtitle[$loc]))
- {
- $title = ucwords(str_replace($order," ",$newtitle[$loc]));
- if ($title == "")
- {
- $title = ucwords(str_replace($order," ",$newtitle[$loc-1]));
- }
- }
- else if ( strtolower($newtitle[$loc]) == "index.html")
- {
- $title = ucwords(str_replace($order," ",$newtitle[$loc-1]));
- }
- }
- echo "
- <div class='width: 400px;'>
- <div class='title'><a href='$url' target='_blank'><b>$title</b></a>
- <font size='-1'> (Ranking : $rank)</font></div>
- <div class='url'>$url</div>
- <div class='time'>$date</div>
- <div class='desc'>$desc</div>
- </div>
- <br />
- ";
- }
- }
- }
- }
- catch (Exception $e)
- {
- die('ERROR: ' . $e->getMessage());
- }
- }
- ?>
- </body>
- </html>
Dari code tersebut dapat diketahui index.swish-e dibaca oleh function swish, kemudian dieksekusi dengan menggunakan query yang diinputkan kemudian ditampung oleh variabel $queryStr. Sedangkan fungsi dari microtime();dari start dan end diantara proses eksekusi yaitu melakukan perbandingan waktu sebelum dan setelah eksekusi, kemudian dilakukan pengambilan nilai sebanyak 5 digit dibelakang koma dan ditampung oleh variabel $time sehingga dapat diketahui waktu yang dibutuhkan dalam proses eksekusi query. Dari variabel penampung $fnum yang menggambil nilai $result->hits; dari jumlah file yang terdapat saat dilakukan pencarian query.
Agar tampilan dari pencarian lebih menarik, tambahkan sebuah file CSS dengan naman "style.css" kemudian tambahkan script berikut:
- body {
- font-family: Arial;
- font-size: 14px;
- padding-top: 20px
- padding-right: 50px;
- padding-left: 50px;
- }
- .url {
- color: green;
- font-size:14px;
- }
- .title {
- font-size:16px;
- }
- .time {
- font-size:12px;
- color: grey;
- }
- .desc {
- font-size:14px;
- margin-right: 500px;
- }
Setelah selesai membuat program PHP tersebut, maka informasi dari pencarian kata yang ditampilkan dari index.swish-e seperti gambar berikut:
Untuk Lebih lanjutnya lihat demo yang telah dibuat dengan variasi dari tampilan untuk Kivine Search Engine:
Selamat mencoba, semoga berhasil dan bermanfaat.
Tidak ada komentar:
Posting Komentar