Thursday, February 24, 2011

SphinxSearch dengan XmlPipe2

hmm dalam beberapa hari ini ada tugas information retrieval (IR), harus membuat program sphinx dengan korpus /data xml. setelah beberapa hari akhirnya saya dan dealopa berhasil :D. ini adalah cara cara dalam membuat sphinxsearch dengan data xml.
  • download sphinxsearch 1.10 beta version, mengapa memakai sphinxsearch 1.10 bukan sphinxsearch 0.9.9. alasannya karena di versi 0.9.9 saya tidak dapat menemukan bagaimana tag content di xml itu dapat terparsing di php nanti, setelah saya cari cari di internet ternyata memang versi 0.9.9 mempunyai kelemahan seperti itu. dan di versi yang 1.10 ini walaupun masih beta tetapi kelemahan itu sudah diatasi :D jadi kita memakai sphinxsearch 1.10. untuk mendownloadnya dapat di download disini
  • setelah itu extract  hasil download anda. untuk memudahkan saya menyarankan untuk menaruh hasil ektract ke dalam drive C windows dan rename nama foldernya menjadi sphinx
  • setelah itu masuk ke dalam folder sohinx yang sudah di extract tadi, akan ada file bernama sphinx-min.conf.in copy dan paste file tersebut, lalu rename menjadi sphinx.conf 
  • buka sphinx.conf nya lalu samakan isinya seperti ini 
#konfigurasi untuk sphinx
#
# Minimal Sphinx configuration sample 

#(clean, simple, functional)
#
source srcxml
{
      type = xmlpipe
      xmlpipe_command = type C:\sphinx\corpus\1.xml
      xmlpipe_field = subject
      xmlpipe_field = content
      xmlpipe_fixup_utf8 = 1
}
index test1
{
    source         = srcxml
    path           = c:/sphinx/data/test1
    docinfo        = extern
    morphology     = stem_en
    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        = 1000
    seamless_rotate    = 1
    preopen_indexes    = 0
    unlink_old         = 1
}
  • jika sudah sama maka langkah selanjutnya adalah kita buat folder bernama data,corpus, dan log di dalam folder sphinx. data adalah folder untuk menyimpan hasil indexing kita, corpus adalah folder corpus kita, didalam folder ini nanti kita taruh xml kita agar dapat di index oleh sphinx, dan log adalah folder yang digunakan oleh sphinx service ketika berjalan
  • di dalam folder corpus, kita buat file xml, namakan saja 1.xml, isi file 1.xml adalah sebagai berikut
    <?xml version="1.0" encoding="utf-8"?>
    <sphinx:docset>
    
    <sphinx:schema>
    <sphinx:field name="subject" attr="string"/> 
    <sphinx:field name="content" attr="string"/>
    <sphinx:attr name="published" type="timestamp"/>
    <sphinx:attr name="author_id" type="int" bits="16" default="1"/>
    </sphinx:schema>
    
    <sphinx:document id="1234">
    <content>this is the main ilkom content </content>
    <published>1012325463</published>
    <subject>note how field/attr tags can be
    in <b class="red">randomized</b> order</subject>
    </sphinx:document>
    
    <sphinx:document id="1235">
    <subject>another subject sphinx</subject>
    <content>here comes another document, and i am given to 
    understand,
    that in-document field order must not matter, sir</content>
    <published>1012325467</published>
    </sphinx:document>
    
    <!-- ... even more sphinx:document entries here ... -->
    
    
    </sphinx:docset>
     
  • jika data 1.xml sudah siap maka langkah selanjutnya kita mengindex corpus yang kita buat, buka command prompt / cmd lalu ketikkan
c:/sphinx/bin/indexer.exe --config c:/sphinx/sphinx.conf --all

  • apa artinya? kita mengindex corpus 1.xml dengan tools indexing sphinx. oleh karena itu kita membutuhkan --config c:/sphinx/sphinx.conf --all agar corpus yg terdaftar di sphinx.conf terindex
  • jika indexing berhasil maka langkah selajutnya adalah kita buat service search di windows, service ini digunakan oleh sphinx untuk mencari data di file indexing kita. ketikkan command di bawah ini di cmd kita
c:\sphinx\bin\searchd.exe --install --config c:\sphinx\
sphinx.conf --servicename SphinxSearchNew 

  • terkadang terjadi error saat menjalankan perintah diatas.. jika iyah coba jalankan cmd anda sebagai administrator caranya... cari cmd -> klik kanan pada cmd -> run as admnistrator . jika sudah maka jalankan kembali perintah yang diatas.
  • jika sphinx berhasil dibuat kita cek dahulu apakah service SphinxSearchNew sudah berjalan caranya adalah kita buka control panel ->administrative tools -> services lalu cari SphinxSearchNew jika statusnya belum jalan maka jalankan :D
  • sampai sini kita telah membuat data indexing dan menjalankan service untuk sphinx. langkah selanjutnya adalah buat project baru di dalam folder htdocs xampp kita (saya menggunakan xampp, :D), sebagai contoh kita buat folder sphinx di dalam xampp->htdocs,
  •  kita copy sphinxapi.php dari dalam folder c:/sphinx ke folder xampp->htdocs
  • lalu buat index.php, didalam index.php copykan program berikut
 <html><title>Sphinx Search XML</title>
      <body>
      <form method="get" action="">
      <input type="text" name="q" value="<?=$_GET['q'];?>" />
      <input type="submit" name="op" value="search"/>
      </form>
      <?php
      if($_GET['q']){
        require ( "sphinxapi.php" );
        $cl = new SphinxClient();
        $cl->SetServer('localhost', 9312);
        $cl->SetArrayResult(TRUE);
        $cl->SetSortMode(SPH_SORT_EXTENDED, "date_added desc");
        $cl->SetMatchMode(SPH_MATCH_EXTENDED2);
        $cl->SetRankingMode ( SPH_RANK_PROXIMITY );
        $res = $cl->Query($_GET['q']);

        if ( $res===false ){
           print "Query failed: " . $cl->GetLastError() .".\n";
           }else{                  
                echo '<p>'.$cl->GetLastWarning().'</p>';
                echo '<p>Find : '.$res[total].'
Data || Time : '.$res[time].' Seconds</p>
<ol style=font-family:arial,sans-serif;
color:blue;text-align:left>';
 foreach($res['matches'] as $data){
 echo '<li><strong>'.$data['attrs']['subject'].'
</strong><br /><em><font style=font-style:normal;color:black>';
$katacontent = explode(" ",$data['attrs']['content']);
                    for($z=0;$z<=50;$z++)
                    {
                        echo $katacontent[$z]." ";
                    }
                    
                    echo ' ...</font><br />
<font style=font-style:normal;color:green>
<a href='.$data['attrs']['link'].' target=_blank>'
.$data['attrs']['link'].'</a></font></li><br />';
                  }
                  echo '</ol>';
           }

        }
        ?>

      </body>
   
      </html>

jika semua sudah sama kemungkinan besar akan benar ketika kita mencari kata ilkom atau sphinx.
mungkin segini dahulu sphinx dengan xml, maaf jika belum ada gambarnya.. nanti saya coba upload gambarnya :D

1 comment:

dian said...

Bagaimana cara mendapatkan/ mengakses hash yg sudah di indexing oleh Sphix..