Sphinx Search Engine in PyThon, PHP, and Matlab

Saat data besar, database relasional saja tidak cukup untuk memenuhi kebutuhan informasi (storage, retrieval dan-atau analitik). Setidaknya untuk kebutuhan pencarian yang cepat dan handal dibutuhkan sebuah search engine (dan-atau NoSQL). Pada post kali ini saya akan bahas setup sederhana Sphinx Search Engine dan bagaimana mengaksesnya melalui PHP, PyThon dan Matlab. Mengapa PyThon dan Matlab juga dibahas ? Sejujurnya karena saya pernah membutuhkan tutorial ini, tapi setelah bertanya berkali-kali ke ‘Mbah Google’ tidak menemukan apa yang saya cari. Semoga tutorial ini kelak bermanfaat bagi siapa saja yang membutuhkan. Alasan saya menulis post ini juga karena Sphinx memang search engine yang cukup mumpuni, open source, dan MySQL friendly. Popularitas Sphinx sedikit-banyak terdongkrak karena kemudahannya dalam mengindex data dari database relasional yang paling populer saat ini (i.e. MySQL). Catatan: ketika database MySQL besar, pencarian (query) FullText akan sangat lambat dan hasil query-nya kurang relevant.

Saya awali sedikit dengan pendahuluan SphixSearch (http://sphinxsearch.com/). Sphinx adalah search engine yang cukup mumpuni dan well-known (saat post ini ditulis, Sphinx termasuk Top 5). Sphinx memiliki beberapa kelebihan dibandingkan pesaingnya. Diantaranya saja, kemudahan indexing data dari MySQL, geoSpatial search, custom ranking scheme,  dan performa yang mumpuni (baik search maupun indexing). Performa Sphinx didapatkan karena ia C++ based, kebanyakan search engine lain Java based (i.e. Lucene, Elastic, Solr, dll). Tidak ada yang sempurna, Sphinx juga tak luput dari beberapa kekurangan: seperti scalability yang lebih sulit di atur ketimbang pesaingnya, support driver, dsb. Tentu saja kalau kita bicara teknologi Big Data tidak ada “Obat Dewa” yang bisa digunakan untuk semua kasus. Bergantung dari aplikasinya, teknologi tertentu lebih cocok ketimbang yang lain (bahasan ini diluar scope post ini).

Cukup dengan pendahuluan, mari kita mulai ‘aksi’. Sebelumnya, mari kita siapkan beberapa requirement dasar:

  1. Unduh Sphinx Search Engine: Link
  2. Saya asumsikan Matlab, PHP, dan-atau PyThon telah terinstal dan berfungsi dengan baik.
  3. Untuk Matlab instal dan unduh MySQL JDBC driver: LINK 
  4. Untuk PyThon instal pyMsql dengan perintah dari terminal (command prompt) “conda install pymysql” ATAU “pip install pymysql
  5. MySQL  telah terinstall dan berjalan dengan baik.
  6. Untuk keseragaman/kemudahan tutorial ini, mari kita gunakan sample database MySQL berikut: LINK. Import atau CoPas dan run saja SQLnya (db-nya tidak besar).

Mari kita awali dengan setting, installing dan indexing Sphinx dengan sumber data dari database MySQL diatas.

  1. Extract sphinx yang telah di unduh (Langkah 1), misal C:\sphinx [Lihat gambar di bawah]
  2. Buat 2 folder di dalamnya: C:\sphinx\data dan C:\sphinx\log [Lihat gambar di bawah]
  3. Buka NotePad atau text editor lainnya dan save Sphinx Config berikut ke folder sphinx (i.e. C:\sphinx\sphinx.conf) atau silahkan unduh (LINK) :
  4. Buka command prompt dan jalankan tiga perintah berikut di Administrator Command Prompt untuk mulai meng-index data, install service, & menjalankannya:
  5. Catatan: Langkah 4 dapat diketikkan ke file text dan disimpan dengan extensi “.bat” lalu dieksekusi.
  6. Selamat, anda baru saja berhasil menginstall dan index Sphinx search engine. Untuk memverifikasi Sphinx telah berjalan dengan baik silahkan ketikkan perintah berikut di command prompt:

sphinx_folder

Catatan/tips:

[1]. Jika akan dilakukan indexing ulang dan instalasi service sphinx baru, ada baiknya perintah-perintah berikut dijalankan terlebih dahulu di shell (Administrator command prompt):

[2]. Sphinx sendiri sebenarnya tidak membutuhkan MySQL. Di contoh ini MySQL digunakan hanya sebagai sumber data. Namun sumber data juga bisa bersumber dari file (e.g. HTML, XML, CSV, JSon,dsb) atau biasa dikenal dengan istilah pipeline.

[3]. Sphinx dapat dijalankan menggunakan SphinxAPI maupun SphinxQL, namun SphinxAPI lebih lambat dan mulai dihilangkan secara bertahap oleh developernya.

Sekarang mari kita bahas bagaimana menjalankan Query Sphinx (SphinxQL) dari PHP, PyThon, dan-atau Matlab.

  • Untuk PHP developers ==> LINK
  • Untuk PyThon users ==> LINK
  • dan Matlab fanatics ==> LINK

Beberapa hal-hal penting yang belum dibahas di post ini & insya Allah akan dibahas di lain waktu:

  1. Penggunaan StopWords
  2. High Performance Sphinx : Distributed/MultiThread index.
  3. RealTime Index & Updating Index.
  4. Batch Query.
  5. Pipelining.
  6. Custom Ranking,
  7. Sphinx Security, dsb.

5 thoughts on “Sphinx Search Engine in PyThon, PHP, and Matlab

  1. Pingback: Using Sphinx from Matlab, PHP, PyThon & | Taufik Sutanto

Leave a Reply