Temu Kembali Informasi dan Sphinx Search

Pernah ingin membuat search engine sendiri seperti google,yahoo, dll?? Mungkin pernah tapi pasti ribet buatnya. (Baca juga: Information Retrieval-Bagian 1). Sebenarnya ada search engine atau framework yang sudah cukup populer dan siap pakai, dan free tentunya. Salah satunya adalah Sphinx Search
Sekarang saya tidak akan membahas bagaimana suatu sistem temu kembali informasi atau information retrieval bekerja, atau membahas secara detail proses-proses yang terjadi di dalamnya seperti praproses dokumen dan lainnya, tapi lebih kepada bagaimana membuat sistem temu kembali informasi atau search engine dengan Sphinx Search. Langkah-langkah yang harus dilakukan adalah:

1. Download SphinxSearch Download Sphinx Search, kemudian pilih versi yang sesuai dengan OS Anda.
2. Kemudian ekstrak file hasil download tadi sehingga menghasilkan folder “sphinx”
3. Copy-kan folder sphinx tadi ke drive mana saja, tetapi disarankan ke drive C: agar lebih mudah mengikuti langkah-langkah di postingan ini.
4. Buat file corpus (koleksi dokumen) dengan format xml, isinya bebas, atau Anda dapat meng-copy 9 dokumen yang saya ambil dari KOMPAS.COM dibawah ini, dan simpan dengan nama corpus.xml

<?xml version="1.0" encoding="utf-8"?>
<sphinx:docset>
<sphinx:schema>
<sphinx:field name="title" attr="string"/>
<sphinx:field name="content" attr="string"/>
</sphinx:schema>

<sphinx:document id="1">
<title>Privatisasi Saudi Arabian Airlines Dipercepat</title>
<content>
Raja Arab Saudi King Abdullah telah memerintahkan pendirian Otoritas Penerbangan Sipil dengan salah satu fungsi untuk mempersiapkan pergantian direksi dari Saudi Arabian Airlines. Sebuah upaya untuk mempercepat privatisasi maskapai nasional Arab Saudi.
Saudi Arabian Airlines nantinya juga akan bertanggungjawab ke Otoritas Penerbangan Sipil yang melaporkan langsung ke raja dalam kapasitas sebagai Perdana Menteri. Tidak lagi, melaporkan tugas dan tanggungjawabnya kepada Kementerian Pertahanan.
Seperti dikutip kantor berita Reuters, Minggu (6/11/2011), kolumnis Arab Saudi, Hossein Shobokshi, menuliskan, inilah era baru menuju privatisasi dari maskapai-maskapai, liberalisasi penerbangan di Arab Saudi, dan kemungkinan besar adanya pengembangan bandar udara sebagai bisnis yang mendatangkan keuntungan.
Meski Raja Arab Saudi telah memerintahkan restrukturisasi direksi Saudi Arabian Airlines, belum diumumkan nama-nama dari direksi baru itu. Kini, Saudi Arabian Airlines merupakan salah satu dari maskapai-maskapai terbesar di Timur Tengah, yang menerbangkan 137 unit pesawat hampir 2,5 kali lebih besar dari Lion Air.
Upaya privatisasi sebenarnya telah diluncurkan sejak tahun 2006 dengan membagi perusahaan dalam enam unit, yakni katering, kargo, perawatan pesawat, maskapai, akademi penerbangan, dan penanganan di darat (ground-handling).
Saudi Airlines Cargo misalnya, 30 persen sahamnya telah diprivatisasi oleh Tarabut Air Freight Service. Sementara bisnis groun handling services dari maskapai itu, telah dimerjer dengan National Handling Services dan Attar Travel Company.
</content>
</sphinx:document>

<sphinx:document id="2">
<title>Serangan Militer ke Iran Mungkin Terjadi</title>
<content>
Kita harus memperhatikan negara-negara ini dan memastikan mereka menjaga komitmen. Ini harus dilakukan dan banyak pilihan untuk melakukannya," tambah Peres sebagaimana warta AP dan AFP.
Sebelumnya, surat kabar Haaretz melaporkan Perdana Menteri Israel Benjamin Netanyahu dan Menteri Pertahanan Ehud Barak mencari dukungan kabinet untuk menyerang Iran. Israel dan negara-negara Barat menuding Iran tengah mengembangkan senjata nuklir.
Haaretz melaporkan belum diambil keputusan apapun soal serangan militer ke Iran. Tetapi, hasil laporan pengawas nuklir Iran itu akan menjadi salah satu acuan keputusan pemerintah Israel.
Dalam laporannya, Haaretz mengatakan sebanyak 15 anggota kabinet keamanan Israel sejauh ini masih menentang rencana serangan militer ke Iran.
Sebelumnya, Badan Urusan Nuklir Dunia (IAEA) memfokuskan perhatiannya pada usaha Iran memproduksi uranium dan plutonium yang dapat digunakan untuk pembangkit listrik maupun pembangunan persenjataan nuklir. Namun, laporan terbaru ini nampaknya akan fokus pada upaya Iran memasang material radioaktif pada hulu ledak dan membangun peluru kendali untuk membawa hulu ledak nuklir itu.</content>
</sphinx:document>

<sphinx:document id="3">
<title>Tujuh Rumah Terancam Runtuh</title>
<content>
Tujuh rumah di sempadan jembatan Sungai Arus, Desa Losari, Kecamatan Rembang, Kabupaten Purbalingga, Jawa Tengah, yang ambrol sejak Jumat (4/11/2011) malam lalu, terancam ambruk. Rumah-rumah tersebut saat ini sudah rusak berat akibat retakan tanah yang semain luas.
Pantauan Kompas, Minggu, dinding dan lantai ketujuh rumah tersebut retak. Lantai pun menganga di beberapa sudut akibat tanah di bawahnya labil.
Ketujuh rumah tersebut milik Riyanto, Sukei, Sunarto, Sukar, Saemun, dan Sumanto. Semuanya warga RT 10 RW 2 Desa Losari. Menurut Saemun (54), semakin hari, retakan tanah di sekitar rumahnya kian dalam.
"Kalau hujan deras turun setiap hari, bisa-bisa rumah saya ikut terseret ke sungai. Fondasi jembatan saja yang sangat kuat bisa roboh, apalagi rumah saya," tutur Riyanto (45) yang rumahnya berada paling dekat dengan sungai.
Ambrolnya jembatan Sungai Arus pada Jumat sore lalu itu juga menyebabkan 48 penghuni tujuh rumah di sekitarnya mengungsi. Menurut Saemun, pihak Pemerintah Kabupaten Purbalingga sudah mengirim bantuan berupa logistik, obat-obatan, dan selimut.</content>
</sphinx:document>

<sphinx:document id="4">
<title>Privatisasi Saudi Arabian Airlines Dipercepat</title>
<content>
Raja Arab Saudi King Abdullah telah memerintahkan pendirian Otoritas Penerbangan Sipil dengan salah satu fungsi untuk mempersiapkan pergantian direksi dari Saudi Arabian Airlines. Sebuah upaya untuk mempercepat privatisasi maskapai nasional Arab Saudi.
Saudi Arabian Airlines nantinya juga akan bertanggungjawab ke Otoritas Penerbangan Sipil yang melaporkan langsung ke raja dalam kapasitas sebagai Perdana Menteri. Tidak lagi, melaporkan tugas dan tanggungjawabnya kepada Kementerian Pertahanan.
Seperti dikutip kantor berita Reuters, Minggu (6/11/2011), kolumnis Arab Saudi, Hossein Shobokshi, menuliskan, inilah era baru menuju privatisasi dari maskapai-maskapai, liberalisasi penerbangan di Arab Saudi, dan kemungkinan besar adanya pengembangan bandar udara sebagai bisnis yang mendatangkan keuntungan.
Meski Raja Arab Saudi telah memerintahkan restrukturisasi direksi Saudi Arabian Airlines, belum diumumkan nama-nama dari direksi baru itu. Kini, Saudi Arabian Airlines merupakan salah satu dari maskapai-maskapai terbesar di Timur Tengah, yang menerbangkan 137 unit pesawat hampir 2,5 kali lebih besar dari Lion Air.
Upaya privatisasi sebenarnya telah diluncurkan sejak tahun 2006 dengan membagi perusahaan dalam enam unit, yakni katering, kargo, perawatan pesawat, maskapai, akademi penerbangan, dan penanganan di darat (ground-handling).
Saudi Airlines Cargo misalnya, 30 persen sahamnya telah diprivatisasi oleh Tarabut Air Freight Service. Sementara bisnis groun handling services dari maskapai itu, telah dimerjer dengan National Handling Services dan Attar Travel Company.
</content>
</sphinx:document>

<sphinx:document id="5">
<title>Serangan Militer ke Iran Mungkin Terjadi</title>
<content>
Kita harus memperhatikan negara-negara ini dan memastikan mereka menjaga komitmen. Ini harus dilakukan dan banyak pilihan untuk melakukannya," tambah Peres sebagaimana warta AP dan AFP.
Sebelumnya, surat kabar Haaretz melaporkan Perdana Menteri Israel Benjamin Netanyahu dan Menteri Pertahanan Ehud Barak mencari dukungan kabinet untuk menyerang Iran. Israel dan negara-negara Barat menuding Iran tengah mengembangkan senjata nuklir.
Haaretz melaporkan belum diambil keputusan apapun soal serangan militer ke Iran. Tetapi, hasil laporan pengawas nuklir Iran itu akan menjadi salah satu acuan keputusan pemerintah Israel.
Dalam laporannya, Haaretz mengatakan sebanyak 15 anggota kabinet keamanan Israel sejauh ini masih menentang rencana serangan militer ke Iran.
Sebelumnya, Badan Urusan Nuklir Dunia (IAEA) memfokuskan perhatiannya pada usaha Iran memproduksi uranium dan plutonium yang dapat digunakan untuk pembangkit listrik maupun pembangunan persenjataan nuklir. Namun, laporan terbaru ini nampaknya akan fokus pada upaya Iran memasang material radioaktif pada hulu ledak dan membangun peluru kendali untuk membawa hulu ledak nuklir itu.</content>
</sphinx:document>

<sphinx:document id="6">
<title>Tujuh Rumah Terancam Runtuh</title>
<content>
Tujuh rumah di sempadan jembatan Sungai Arus, Desa Losari, Kecamatan Rembang, Kabupaten Purbalingga, Jawa Tengah, yang ambrol sejak Jumat (4/11/2011) malam lalu, terancam ambruk. Rumah-rumah tersebut saat ini sudah rusak berat akibat retakan tanah yang semain luas.
Pantauan Kompas, Minggu, dinding dan lantai ketujuh rumah tersebut retak. Lantai pun menganga di beberapa sudut akibat tanah di bawahnya labil.
Ketujuh rumah tersebut milik Riyanto, Sukei, Sunarto, Sukar, Saemun, dan Sumanto. Semuanya warga RT 10 RW 2 Desa Losari. Menurut Saemun (54), semakin hari, retakan tanah di sekitar rumahnya kian dalam.
"Kalau hujan deras turun setiap hari, bisa-bisa rumah saya ikut terseret ke sungai. Fondasi jembatan saja yang sangat kuat bisa roboh, apalagi rumah saya," tutur Riyanto (45) yang rumahnya berada paling dekat dengan sungai.
Ambrolnya jembatan Sungai Arus pada Jumat sore lalu itu juga menyebabkan 48 penghuni tujuh rumah di sekitarnya mengungsi. Menurut Saemun, pihak Pemerintah Kabupaten Purbalingga sudah mengirim bantuan berupa logistik, obat-obatan, dan selimut.</content>
</sphinx:document>

<sphinx:document id="7">
<title>Privatisasi Saudi Arabian Airlines Dipercepat</title>
<content>
Raja Arab Saudi King Abdullah telah memerintahkan pendirian Otoritas Penerbangan Sipil dengan salah satu fungsi untuk mempersiapkan pergantian direksi dari Saudi Arabian Airlines. Sebuah upaya untuk mempercepat privatisasi maskapai nasional Arab Saudi.
Saudi Arabian Airlines nantinya juga akan bertanggungjawab ke Otoritas Penerbangan Sipil yang melaporkan langsung ke raja dalam kapasitas sebagai Perdana Menteri. Tidak lagi, melaporkan tugas dan tanggungjawabnya kepada Kementerian Pertahanan.
Seperti dikutip kantor berita Reuters, Minggu (6/11/2011), kolumnis Arab Saudi, Hossein Shobokshi, menuliskan, inilah era baru menuju privatisasi dari maskapai-maskapai, liberalisasi penerbangan di Arab Saudi, dan kemungkinan besar adanya pengembangan bandar udara sebagai bisnis yang mendatangkan keuntungan.
Meski Raja Arab Saudi telah memerintahkan restrukturisasi direksi Saudi Arabian Airlines, belum diumumkan nama-nama dari direksi baru itu. Kini, Saudi Arabian Airlines merupakan salah satu dari maskapai-maskapai terbesar di Timur Tengah, yang menerbangkan 137 unit pesawat hampir 2,5 kali lebih besar dari Lion Air.
Upaya privatisasi sebenarnya telah diluncurkan sejak tahun 2006 dengan membagi perusahaan dalam enam unit, yakni katering, kargo, perawatan pesawat, maskapai, akademi penerbangan, dan penanganan di darat (ground-handling).
Saudi Airlines Cargo misalnya, 30 persen sahamnya telah diprivatisasi oleh Tarabut Air Freight Service. Sementara bisnis groun handling services dari maskapai itu, telah dimerjer dengan National Handling Services dan Attar Travel Company.
</content>
</sphinx:document>

<sphinx:document id="8">
<title>Serangan Militer ke Iran Mungkin Terjadi</title>
<content>
Kita harus memperhatikan negara-negara ini dan memastikan mereka menjaga komitmen. Ini harus dilakukan dan banyak pilihan untuk melakukannya," tambah Peres sebagaimana warta AP dan AFP.
Sebelumnya, surat kabar Haaretz melaporkan Perdana Menteri Israel Benjamin Netanyahu dan Menteri Pertahanan Ehud Barak mencari dukungan kabinet untuk menyerang Iran. Israel dan negara-negara Barat menuding Iran tengah mengembangkan senjata nuklir.
Haaretz melaporkan belum diambil keputusan apapun soal serangan militer ke Iran. Tetapi, hasil laporan pengawas nuklir Iran itu akan menjadi salah satu acuan keputusan pemerintah Israel.
Dalam laporannya, Haaretz mengatakan sebanyak 15 anggota kabinet keamanan Israel sejauh ini masih menentang rencana serangan militer ke Iran.
Sebelumnya, Badan Urusan Nuklir Dunia (IAEA) memfokuskan perhatiannya pada usaha Iran memproduksi uranium dan plutonium yang dapat digunakan untuk pembangkit listrik maupun pembangunan persenjataan nuklir. Namun, laporan terbaru ini nampaknya akan fokus pada upaya Iran memasang material radioaktif pada hulu ledak dan membangun peluru kendali untuk membawa hulu ledak nuklir itu.</content>
</sphinx:document>

<sphinx:document id="9">
<title>Tujuh Rumah Terancam Runtuh</title>
<content>
Tujuh rumah di sempadan jembatan Sungai Arus, Desa Losari, Kecamatan Rembang, Kabupaten Purbalingga, Jawa Tengah, yang ambrol sejak Jumat (4/11/2011) malam lalu, terancam ambruk. Rumah-rumah tersebut saat ini sudah rusak berat akibat retakan tanah yang semain luas.
Pantauan Kompas, Minggu, dinding dan lantai ketujuh rumah tersebut retak. Lantai pun menganga di beberapa sudut akibat tanah di bawahnya labil.
Ketujuh rumah tersebut milik Riyanto, Sukei, Sunarto, Sukar, Saemun, dan Sumanto. Semuanya warga RT 10 RW 2 Desa Losari. Menurut Saemun (54), semakin hari, retakan tanah di sekitar rumahnya kian dalam.
"Kalau hujan deras turun setiap hari, bisa-bisa rumah saya ikut terseret ke sungai. Fondasi jembatan saja yang sangat kuat bisa roboh, apalagi rumah saya," tutur Riyanto (45) yang rumahnya berada paling dekat dengan sungai.
Ambrolnya jembatan Sungai Arus pada Jumat sore lalu itu juga menyebabkan 48 penghuni tujuh rumah di sekitarnya mengungsi. Menurut Saemun, pihak Pemerintah Kabupaten Purbalingga sudah mengirim bantuan berupa logistik, obat-obatan, dan selimut.</content>
</sphinx:document>
</sphinx:docset>

Yang perlu diperhatikan adalah tag penyusun untuk setiap dokumen, yaitu <sphinx:field/> yang berfungsi sebagai penunjuk bagian apa saja dari dokumen yang ingin kita index, pada contoh diatas adalah title dan content dari dokumen.
5. Kemudian buka folder sphinx dan buat 3 folder baru dengan nama “data”, “corpus” dan “log”. Kemudian copy file corpus.xml yang telah dibuat tadi ke dalam folder corpus.
6. Kemudian edit file sphinx.conf yang ada di dalam folder C:sphinx (bisa dibuka dengan notepad++ biar lebih mudah editnya), kemudian ganti semua isinya dengan kode di bawah ini.

source srcxml
{
 type = xmlpipe
 xmlpipe_command = type C:\sphinx\corpus\corpus.xml
 xmlpipe_field = docno
 xmlpipe_field = title
 xmlpipe_field = content
 xmlpipe_fixup_utf8 = 1
}
index test1
{
 source = srcxml
 path = c:/sphinx/data/test1
 docinfo = extern
 min_word_len = 3
 charset_type = utf-8
 enable_star = 0
 html_strip = 0
}
indexer
{
 mem_limit = 32M
}
searchd
{
 port = 9312
 log = c:/sphinx/log/searchd.log
 query_log = c:/sphinx/log/query.log
 read_timeout = 5
 max_children = 30
 pid_file = c:/sphinx/log/searchd.pid
 max_matches = 2500
 seamless_rotate = 1
 preopen_indexes = 0
 unlink_old = 1
}

7. Langkah selanjutnya adalah mengindex corpus yang telah kita buat dengan menggunakan command prompt. Bagi pengguna Windows Vista/7/8 harus menjalankan command prompt sebagai Administrator (Run As Administrator), setelah jendela command prompt terbuka jalankan perintah ini:


c:\sphinx\bin\indexer.exe --config c:\sphinx\sphinx.conf --all

8. Apabila sukses langkah selanjutnya adalah dengan membuat service, masih lewat command prompt ketikan perintah ini:


c:\sphinx\bin\searchd --install --config c:\sphinx\sphinx.conf --servicename MySphinx

Nama service di atas dicontohkan dengan “MySphinx” tapi nama service tersebut dapat terserah Anda.
9. Langkah terakhir adalah, copy file “sphinxapi.php” dari folder sphinx->apikedalam htdoc (contohnya saya menggunakan XAMPP) Kemudian buat file php sederhana sebagai antar muka sistem.

<html><title>Sphinx Search</title>
<body>
 <form method="get" action="">
 <input type="text" name="q" size="70"/>
 <input type="submit" name="op" value="search"/>
 </form>
 <?php
 if($_GET['q'])
 {
 require ( "sphinxapi.php" );
 $cl = new SphinxClient();
 $cl->SetArrayResult(TRUE);
 $cl->SetMatchMode(SPH_MATCH_EXTENDED);
 $cl->SetRankingMode (SPH_RANK_BM25);
 $res = $cl->Query($_GET['q']);
 if ( $res===false )
 {
 print "Query failed: " . $cl->GetLastError() .".\n";
 }
 else
 {
 echo '<p>'.$cl->GetLastWarning().'</p>';
 echo '<p>'.$res[total].' dokumen untuk <i><b>'.$_GET['q'].'</i></b> ('.$res[time].' detik)</p><ol style=font-family:arial,sans-serif;color:black;text-align:left>';
 if ($res[total]!=0)
 {
 foreach($res['matches'] as $data)
 {
 $katasubject = explode(" ",$data['attrs']['title']);
 for($z=0;$z<=100;$z++)
 {
 if(strtolower($katasubject[$z])==$_GET['q'] || strtoupper($katasubject[$z])==$_GET['q'] ||$katasubject[$z]==$_GET['q']) echo "<font style=font-style:normal;background:yellow> <b>".$katasubject[$z]."</b></font> ";
 else echo $katasubject[$z]." ";
 }
 echo "...</a><br/>";
 $katacontent = explode(" ",$data['attrs']['content']);
 for($z=0;$z<=20;$z++)
 {
 if(strtolower($katacontent[$z])==$_GET['q'] || strtoupper($katacontent[$z])==$_GET['q'] ||$katacontent[$z]==$_GET['q']) echo "<font style=font-style:normal;background:yellow> <b>".$katacontent[$z]."</b></font> ";
 else echo $katacontent[$z]." ";
 }
 echo "...<br/><br/>";
 }
 }
 }
 }
 else
 echo 'data tidak ditemukan.';
?>
</html>

Jalankan file php tersebut (ingat file sphinxapi.php harus berada di folder yang sama dengan file php yang kalian buat). Misalnya masukan kueri “jembatan roboh”, jika semua sudah benar maka akan ditemukan 3 dokumen yang relevan dengan kueri. Sekian penjelesan dari saya semoga bermanfaat

Sekian

-Mohamad Reza Pancawan-

7 responses to “Temu Kembali Informasi dan Sphinx Search

  1. Saya sudah coba langkah-labgkah diatas, tetapi tidak mau tampil, dan juga tidak ada tampil kesalahan apapun, saat ini saya menggunakan OS 64 bit. apa pengaruh? mohon bantuan x.

    • Sepertinya karna memang ada beberapa baris yg terlewat saya tulis disini, coba sekarang mba ulangi lagi mudah2an bisa. Oiya pas mau index ulang jgn lupa matikan service yg kita buat d step 8, setelah proses indexing selesai baru nyalakan lagi

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 )

Google+ photo

You are commenting using your Google+ 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 )

Connecting to %s