全文搜尋 (Lucene 和 Ferret)
chinese, ferret, index, java, lucene, rails, ruby, search at May 21st, 2007 by 小影
搜尋器改變了人們的習慣。當有能力在互聯網上用 0.01 秒的搜尋就找到想要的資料時,如果我們的軟件要花個幾秒甚至幾分鐘才找到資料,用家就會覺得這個軟件很差勁了。怎樣去做搜尋?最近單的方法莫過於 SELECT * FROM MYTABLE WHERE CONTENT LIKE '%KEYWORD1%' OR '%KEYWORD2%' 。我們的專案就是用這個方法搜尋用戶地址。這個方法完全沒有問題 -- 起碼 -- 在這一年多的開發、測試環境也沒有問題。直到在實際環境中 -- 有上百萬條記錄的資料庫 -- 這種搜尋對資料庫的壓力太大了。試想著每次也由頭到尾由「黃頁」找一個人吧。每條查詢花上2秒以上的時間,我們的系統可是有 3000 個同時的用家啊!全文搜索全文搜索是另一個方法。它的原理是把文件每一個字也加進索引中,就如查「黃頁」可以直接打開相關的頁數一樣,效率比傳統方法快上一個數量級。Lucene 是一個 Java 的全文搜索工具,利用它任何 Java 軟件也可以為任何文件作全文搜索。它分成兩部份:索引和搜尋。前者把文件經整理和分詞化成可以搜尋的索引;後者則由用者的查詢返回相關結果。Lucene 的擴展性很高,開發者可以編寫不同的 document parser 讓 lucene 支援任何文檔,擴展 Analyzer 以支援不同的語言,也可以自定 query parser 改變搜尋的特性。Lucene 的發展相當成熟,我可不用班門弄斧寫教學了,初學者請讀 IBM developerWorks 实战 Lucene,第 1 部分: 初识 Lucene 。Ruby ...