Ruby on Railsで全文検索

きっとJavaApache Luceneを使って、全文検索システムとか作ってって、それからRailsマンセーとか言って乗り換えてみたものの、Hyper Estraierがイイとか聞いて、インストールしてみたものの、なんだかよくわからん。やっぱLuceneが最高だよね。Lucene使うとなるとTomcatとかテキトーにインストして、Railsとの通信はXMLRPCとか使ってやるか〜うわ!メンドクセー!なんてことを考えている全国のみなさん(多分すげーマイノリティ)朗報ですよ。

Ferret
http://ferret.davebalmain.com/trac
Apache LuceneRubyポーティング版

インデックス作成

index = Index::Index.new()
index = Index::Index.new(:path => '/path/to/index')
index = Index::Index.new(:path => '/path/to/index',
                         :analyzer => WhiteSpaceAnalyzer.new)

include Ferret::Document
doc = Document.new
doc << Field.new("id",    row.id,    Field::Store::NO,  Field::Index::UNTOKENIZED)
doc << Field.new("title", row.title, Field::Store::YES, Field::Index::UNTOKENIZED)
doc << Field.new("data",  row.data,  Field::Store::YES, Field::Index::TOKENIZED)
doc << Field.new("image", row.image, Field::Store::YES, Field::Index::NO)
index << doc

検索

index.search_each('content:"quick brown fox"') do |doc, score|
  puts "Document #{doc} found with a score of #{score}"
end

みたいな。
ドキュメントを読む限り、インクリメンタルインデキシングができたりと
なかなかLuceneを使ったことがある人にはわかりやすいかと

あとは、CJKAnalyzerかJapaneseAnalyzerが使えるのかどうかそのへんですかねえ
ちと調べて報告するかも

#めんどくさいからこのままacts_as_searchableを使うか・・・・^^;