- Unduh Sphinx Search Engine: Link
- Saya asumsikan Matlab, PHP, dan-atau PyThon telah terinstal dan berfungsi dengan baik.
- Untuk Matlab instal dan unduh MySQL JDBC driver: LINK
- Untuk PyThon instal pyMsql dengan perintah dari terminal (command prompt) "conda install pymysql" ATAU "pip install pymysql"
- MySQL telah terinstall dan berjalan dengan baik.
- Untuk keseragaman/kemudahan tutorial ini, mari kita gunakan sample database MySQL berikut: LINK. Import atau CoPas dan run saja SQLnya (db-nya tidak besar).
- Extract sphinx yang telah di unduh (Langkah 1), misal C:\sphinx [Lihat gambar di bawah]
- Buat 2 folder di dalamnya: C:\sphinx\data dan C:\sphinx\log [Lihat gambar di bawah]
- Buka NotePad atau text editor lainnya dan save Sphinx Config berikut ke folder sphinx (i.e. C:\sphinx\sphinx.conf) :
- Buka command prompt dan jalankan tiga perintah berikut di Administrator Command Prompt untuk mulai meng-index data, install service, & menjalankannya:
-
123C:\sphinx\bin\indexer.exe --config C:\sphinx\sphinx.conf --allC:\sphinx\bin\searchd.exe --install --config C:\sphinx\sphinx.conf --servicename sphinxnet start sphinx
- Catatan: Langkah 4 dapat diketikkan ke file text dan disimpan dengan extensi ".bat" lalu dieksekusi.
- 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:
C:\sphinx\bin\search.exe --config C:\sphinx\sphinx.conf "new music"
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):
1
2
3
4
|
sc stop sphinx
sc delete sphinx
del /F/Q C:\sphinx\data\*.*
del /F/Q C:\sphinx\log\*.*
|
[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.
Beberapa hal-hal penting yang belum dibahas di post ini & insya Allah akan dibahas di lain waktu:
- Penggunaan StopWords
- High Performance Sphinx : Distributed/MultiThread index.
- RealTime Index & Updating Index.
- Batch Query.
- Pipelining.
- Custom Ranking,
- Sphinx Security, dsb.
PHP
Code PHP berikut adalah contoh bagaimana menjalankan query SphinxQL di PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php
echo '<b>Experimenting on SphinxSearch ~ PHP</b><br>';
$sphinx = mysqli_connect('127.0.0.1','','','',9301) or die("Error Connection " . mysqli_error($sphinx));
$query="SELECT id,weight() FROM idx1 WHERE MATCH('\"metaphorge dolls\"/1') LIMIT 10 OPTION ranker=SPH04";
echo '<b>Query =</b>"',$query,'"<br>';
echo '<b>Query Results=</b><br>';
$q3=mysqli_query($sphinx,$query) or die("Error 96" . mysqli_error($sphinx));
while ($i = mysqli_fetch_array($q3)) {echo 'id=',$i[0],', Ranking Score=',$i[1],'<br>';}
echo '<b>finished!</b><br>';
mysqli_close($sphinx);
?>
|
Catatan/Tips:
- Ranker di query di atas= Ranking Schemes dan dapat diubah menjadi BM25, BM25 dengan proximity, dll. Selengkapnya dapat dilihat di Link berikut: LINK.
- Sphinx adalah search engine, jadi saya menyarankan Sphinx hanya mengeluarkan output ID saja. Data selengkapnya dapat di query dari database asal. Field weight() sebenarnya tidak dibutuhkan, saya keluarkan sekedar untuk menunjukkan nilai ranking score yang dihasilkan Sphinx. Terkadang berguna bagi mereka yang melakukan riset di IR/SI/bidang lain yang terkait seperti Text Mining, dsb.
- Query di atas basically dapat diganti dengan sembarang Query sebagaimana query di MySQL.
PyThon
Berikut adalah contoh code sederhana bagaimana melakukan Query Sphinx melalui PyThon:
1
2
3
4
5
6
7
|
import pymysql
db = pymysql.connect(host='127.0.0.1',port=9301,user='',passwd='',charset='utf8',db='')
cur = db.cursor()
qry='SELECT id,weight() FROM idx1 WHERE MATCH(\'"metaphorge dolls"/1\') LIMIT 10 OPTION ranker=SPH04'
cur.execute(qry);row = cur.fetchall()
print(row)
cur.close();db.close()
|
Catatan: Module yang digunakan tidak harus PyMysql, sembarang module yang dapat menghubungkan dengan MySQL seharusnya bisa digunakan dengan cara yang serupa.
Matlab
Walau tidak umum, finally mari kita bahas bagaimana mengakses Sphinx melalui Matlab. Berikut contoh codenya:
1
2
3
4
5
6
7
8
|
con=database('','','','com.mysql.jdbc.Driver','jdbc:mysql://127.0.0.1:9301?characterEncoding=utf8&maxAllowedPacket=1024000');
if ~isconnection(con)
disp(['Error Connecting to Sphinx : ',con.Message]);
else
query='SELECT id,weight() FROM idx1 WHERE MATCH(''"metaphorge dolls"/1'') LIMIT 10 OPTION ranker=SPH04';
results=exec(con,query);results=fetch(results);results=results.data;
results
end
|
- Untuk dapat menjalankan code ini di Matlab dengan sukses, jangan driver JDBC dan toolbox database harus terinstal dan berfungsi dengan baik. Silahkan baca POST INI untuk keterangan instalasi JDBC di Matlab.
- Perhatikan parameter koneksi Sphinx~Matlab diatas sedikit berbeda dengan MySQL~Matlab.
- Sebagaimana PyThon hasil query dari Sphinx di matlab adalah Object, silahkan explore lebih jauh properties lainnya selain ".data" dan ".message"
Tidak ada komentar:
Posting Komentar
Relevant & Respectful Comments Only.