終於搞定了ferret的全文檢索搜尋,3個通宵呀,真不容易。
前兩次在我的mac上ferret一直搞不定,主要問題是不能中文分詞,而且總是crash,我懷疑是對macos支援不太好,所以,直接上server(centos)搞。
終於在server上搞定了
注意: 調試時要關閉ferrect-browse, 它會阻止重新register class,讓你的某些更新失效
一直沒搞定的原因是新的api和舊的不一樣,所以一直沒有成功指定customized analyzer,太faint了,網上幾乎沒有新的api調用方式任何例子和文章,都是舊的,只有最新的rdoc裡面有。
今天還有一個錯誤是fields寫成了field(好像因為從網上copy下來的),所以content時而可以index時而不能index,後來發現新寫的測試代碼用的filed,老的是對的。
測試時候,必須先重啟ferret_server然後重啟mongrel,因為ferrect server啟動後不會再重新register index,可能是mongrel啟動時調用act_as_ferrect的時候註冊的,但好像日誌裡ferrect server一起動就知道你regiester了什麼model,不知道怎麼它做到的。
server 安裝過程,
su -
gem install ferret
gem install acts_as_ferret
在你的項目目錄中執行 aaf_install , 如果報找不到命令, 就運行/usr/local/bin/aaf_install
這樣就已經安裝好了,不需要再做其他安裝了。
另外要安裝分詞模快rmmseg
gem install rmmseg
測試
>echo "我們都喜歡用 Ruby" | rmmseg
>我們 都 喜歡 用 Ruby
然後配置config/ferrect_server.yml
在environment.rb中添加require 'acts_as_ferret'
在需要index的model中添加語句
class Doc
# use rmmseg
ranalyzer = RMMSeg::Ferret::Analyzer.new { |tokenizer|
Ferret::Analysis::LowerCaseFilter.new(tokenizer)
}
acts_as_ferret :remote=>true, :fields=>[:title, :content], :ferret=>{:analyzer => ranalyzer} 因為content不是資料欄位,所以添加方法def content #loadContent ... end
資源和lin
Ferrect
http://www.davebalmain.com/trac/wiki/FerretOnRails
Act_as_ferret
http://rm.jkraemer.net/wiki/aaf
rmmseg
http://rmmseg.rubyforge.org/
rdoc
http://code.jkraemer.net/rdoc/acts_as_ferret/
This article is created by 開心寫作網