ruby中文搜尋支援的想法

來源:互聯網
上載者:User

ruby下面中文分詞的搜尋如何進行?

目前開始考慮這個問題, 目標是使用ferret, ferret是lucene搜尋引擎的ruby版本, 憑藉一點lucene的經驗, 我個人是非常喜歡ferret的, 靠lucene強大的分詞,index,search功能, 可以做出很多有趣的功能, 但是ferret有兩個痛點

  1. 不支援中文分詞,而且整合第三方分詞對我來說較困難(沒有開發c的經驗,而且我知道的中文分詞演算法都是java版本)
  2. 有時候做索引會出錯,好象是段地址錯誤, 因為ferret是在前台index, 所以錯誤也是在前台fastcig進程中, 感覺很不爽

原來的想法

利用ferret 和lucene相容的特點, 單獨寫一個java 類庫, 定時對資源做索引,不過後來為了效率(index比lucene快), 新版本的ferret放棄了和lucene相容, 這個想法是不可行了

更新後的想法

利用mysql中文分詞外掛程式,這個東西倒是很好,但是偏偏只支援mysql4.0,和mysql 5.1 beta, 剛好不支援我目前用的mysql5.0.x 由於沒有現成版本可以用, 也只好放棄(這個外掛程式只能用來全文檢索搜尋, 不像ferret還有其他好玩的功能)

目前的想法:

  1. 在ferret中通過rjb調用 lucene的中文分詞然後再index
  2. 需要index的model都增加一個屬性indexed,建立或者更新的時候都把indexed設定為false
  3. 把java寫好的中外分詞通過rjb封裝為一個drb service,或者乾脆掛在resin上做http頁面調用
  4. 在後台,單獨的程式定時啟動把所有未index的記錄select出來(indexed=false), 然後逐一調用第二步開發的進行分詞,即是過程中出錯, 也不影響前台頁面, 這裡只改動ferret的ruby代碼.
  5. 如果可能, 搜尋程式通過遠程協議來對keyword分詞,然後再搜尋

缺點

  1. 這個方案看上去比較噁心.很像一件到處是補丁的衣服, 目前沒有時間慢慢去研究ferret中的c代碼. 只好通過java來繞圈子

  2. 在後台運行index的話, 就無法即時搜尋當前文章, 而是有一個延時, 不過我覺得這個好解決. 另外後台index 就算出錯了也不影響前台頁面, 大不了有些記錄搜尋不到而已

  3. 對keyword分詞會有速度影響, 不過影響應該很小

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.