Sebelumnya saya pernah menulis artikel tentang SOLR. Di artikel itu saya menulis sekilas tentang solr dan cara instalasinya. Nah, kali ini saya akan membuat suatu program yang bisa digunakan untuk melakukan pengindeksan kedalam solr. Sesuai judulnya, program ini ditulis/dikodekan menggunakan bahasa pemrograman PHP.
Program yang akan dibuat memanfaatkan library SolrPHPClient, bisa diunduh disini. Pada program kali ini skenarionya adalah membaca dari database SQL Server, lalu diindeks ke solr. Asumsinya, kita punya tabel di Microsoft SQL Server dengan script dibawah ini:
1 | CREATE TABLE document_index ( |
3 | doc_title varchar (255) NOT NULL , |
5 | doc_author varchar (255) NULL , |
6 | CONSTRAINT pk_document_index PRIMARY KEY (doc_id) |
Menambahkan indeks
Untuk menambahkan indeks ke solr, maka script PHP-nya sebagai berikut:
06 | $dbname = "databasename" ; |
10 | mssql_connect( $dbhost , $dbuser , $dbpass ); |
11 | mssql_select_db( $dbname ); |
14 | $solr = new Apache_Solr_Service( 'localhost' , 8080, '/apache-solr-1.4.1' ); |
22 | "FROM document_index d " . |
23 | "ORDER BY d.doc_title ASC" ; |
25 | $res = mssql_query( $sql ); |
26 | while ( $row = mssql_fetch_row( $res )) { |
27 | echo "dcid : " . $row [0] . "\n" ; |
28 | echo "title : " . $row [1]; |
31 | $doc = new Apache_Solr_Document(); |
33 | $doc ->title = $row [1]; |
34 | $doc ->description = $row [2]; |
35 | $doc ->author = $row [3]; |
36 | $solr ->addDocument( $doc ); |
40 | echo "FINISH INDEXING..." ; |
42 | catch ( Exception $e ) { |
43 | echo $e ->getMessage(); |
46 | echo "Connecting to solr failed...." ; |
Jalankan file php diatas, maka program tersebut akan mengindeks isi dari table document_index ke dalam solr.
Problem Connection Error
Pada saat menjalankan program diatas, beberapa kali saya menemukan eksepsi. Yaitu “0″ Status: Communication Error. Setelah mencari cari, ternyata sebabnya adalah error yang terjadi pada saat php akan berkomunikasi dengan solr. Untuk mengatasinya, bisa dengan mengubah sedikit kode yang ada di file Service.php didalam fungsi _sendRawGet. Cari baris kode yang mirip baris berikut: *pada saat saya mengunduh library ini, tepatnya ada di baris 382.*
383 | $solrResponse = new Apache_Solr_Response( $httpResponse , $this ->_createDocuments, $this ->_collapseSingleValueArrays); |
Diubah menjadi:
383 | $str = file_get_contents ( $url , false, $this ->_postContext); |
384 | if ( empty ( $str ) == false){ |
389 | $response = new Apache_Solr_Response( $str , $http_response_header , |
390 | $this ->_createDocuments, $this ->_collapseSingleValueArrays); |
Perubahan kode diatas, maksudnya adalah melakukan kembali komunikasi ke solr jika terjadi kegagalan komunikasi. Nah efek sampingnya adalah, jika alamat solr yang dituju ternyata down atau off maka akan terjadi perulangan terus menerus. Untuk itu pastikan server solr yang dimaksud sedang berjalan dengan baik. Atau bisa juga ditambahkan kode untuk batas pengulangan.
Menghapus indeks
Untuk menghapus indeks di solr, bisa menggunakan perintah method deleteByQuery. Berikut ini adalah contoh untuk menghapus indeks:
02 | include "Service.php" ; |
03 | $solr = new Apache_Solr_Service( 'localhost' , 8080, '/apache-solr-1.4.1' ); |
07 | $solr ->deleteByQuery( '*:*' ); |
10 | $solr ->deleteByQuery( 'author: roni' ); |
15 | } catch ( Exception $e ) { |
16 | echo $e ->getMessage(); |
19 | echo "Connecting to solr failed....<br>" ; |
Selamat mencoba, semoga bermanfaat
0 komentar:
Posting Komentar