Posts Tagged ‘opensource’

Going Vertical with SOLR: Apa sih SOLR itu?

Friday, May 30th, 2008

rocketHehehe, harus saya akui bahwa saya melewatkan hal penting dalam tulisan saya sebelumnya. Mungkin hal tersebut yang menjerumuskan tulisan saya ke jurang kenistaan tanpa komentar. Nyahahahahah.

To tell you the truth, SOLR is great. SOLR sebenarnya mirip dengan flat database yang teroptimasi untuk keperluan searching. Sama seperti halnya database, dalam SOLR juga dikenal apa yang disebut field. Jika dalam common DBMS bisa terdapat banyak tabel, dalam SOLR hanya bisa dibuat satu “tabel”. Lalu apa bedanya dengan database pada umumnya?

Seperti pada database pada umumnya, field dalam SOLR juga bisa diindex. yang membedakan SOLR dengan ordinary database adalah bahwa cara mengindex dengan algoritma yang kita definisikan sendiri. Misal, kita bisa mengindex dengna menghilangkan whitespace sehingga suatu record bisa dimatchkan dengan keyword: “PowerShot”, “Power-shot”, ataupun “power shot”, atau “power/shot”. Jika memakai database pada umumnya, anda memang bisa mensimulasikan hal yang sama. Akan tetapi anda pasti harus memproses keyword sebelum diforward ke database sebagai query. You won’t need such activity when dealing with SOLR. Dalam dunia SOLR, keyword akan dianalisa oleh SOLR sendiri. Bisa jadi prosesnya sama persis seperti saat hendak melakukan peng-indeks-an atau sama sekali berbeda. Kita bisa mendefinisikan tata caranya sesuai kebutuhan kita. Misalnya, kita ambil dari definisi yang ada di file skema SOLR:

A text field that uses WordDelimiterFilter to enable splitting and matching of  words on case-change, alpha numeric boundaries, and non-alphanumeric chars, so that a query of “wifi” or “wi fi” could match a document containing “Wi-Fi”.

Synonyms and stopwords are customized by external files, and stemming is enabled. Duplicate tokens at the same position (which may result from Stemmed Synonyms or WordDelim parts) are removed.

I guess above quote explains to you how interesting SOLR field is. Hehehe. Versi complete contoh schema bisa dilihat di sini. Jika dicuplik, terkait quote di atas, akan tampak seperti ini:



<!-- A text field that uses WordDelimiterFilter to enable splitting and matching of
        words on case-change, alpha numeric boundaries, and non-alphanumeric chars,
        so that a query of "wifi" or "wi fi" could match a document containing "Wi-Fi".
        Synonyms and stopwords are customized by external files, and stemming is enabled.
        Duplicate tokens at the same position (which may result from Stemmed Synonyms or
        WordDelim parts) are removed.
        -->
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <!-- Case insensitive stop word removal.
             enablePositionIncrements=true ensures that a 'gap' is left to
             allow for accurate phrase queries.
        -->
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
    </fieldType>

See, ada bagian tersendiri untuk melakukan proses analisa dalam rangka pengindeksan dan ada definisi tata cara tersendiri untuk pemrosesan query yang dimasukkan oleh pengguna.

Lalu apa keunggulannya? Jelas unggul karena proses ini sudah “di-refactor”, tidak perlu lagi anda tangani sendiri jika anda memakai solusi database biasanya. Ini berarti anda bisa menyediakan pengalaman berbeda dan lebih unggul. tentun saja ini bisa berarti konten anda akan menjadi lebih discoverable dan lebih memiliki banyak value daripada sekedar teks biasa.

Vertical search, itulah yang terdekat bisa kita pikir. Tidak lagi seperti Google yang saat ini (ya, Google mungkin juga punya data untuk melakukan vertical search), akan tetapi mungkin bisa jadi seperti AOL yang saya contohkan kemarin.

Sumber foto:

Source
Flickr
Author
jurvetson
License