ruby on rails 的全文檢索搜尋

來源:互聯網
上載者:User

終於搞定了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 開心寫作網

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.