acts_as_tritonn

2007/12/9追記

http://d.hatena.ne.jp/ryu00026/20071209
で公開してます


http://qwik.jp/tritonn/
TritonnMySQLから全文検索エンジンSennaを利用可能にするための改造を行うプロジェクト。
MySQLSenna(およびMeCab)を組み込んだバイナリをリリースしているので、インストールが楽そう。

調子こいてRailsのpluginを実装してみた。。
今のところ、クラスメソッドfind_fulltextを使い操作できる

==普通の検索
Model.find_fulltext({:col1 => "hoge"})
# => SELECT * FROM models WHERE MATCH(col1) AGAINST('hoge');
==search_modifier(IN BOOLEAN MODE | WITH QUERY EXPANSION)を指定
Model.find_fulltext({:col1 => "hoge"}, :modifier => "IN BOOLEAN MODE")
# => SELECT * FROM models WHERE MATCH(col1) AGAINST('hoge' IN BOOLEAN MODE);
==search_modifier(IN BOOLEAN MODE | WITH QUERY EXPANSION)を指定
Model.find_fulltext({:col1 => "hoge"}, :modifier => "IN BOOLEAN MODE")
# => SELECT * FROM models WHERE MATCH(col1) AGAINST('hoge' IN BOOLEAN MODE);
Model.find_fulltext({:col1 => "hoge"}, :modifier => "WITH QUERY EXPANSION")
# => SELECT * FROM models WHERE MATCH(col1) AGAINST('hoge' WITH QUERY EXPANSION);
== OR検索
Model.find_fulltext({:col1 => ["hoge foo"]}, :modifier => "IN BOOLEAN MODE")
# => SELECT * FROM models WHERE MATCH(col1) AGAINST('hoge foo' IN BOOLEAN MODE);
== AND検索
Model.find_fulltext({:col1 => ["hoge","foo"]}, :modifier => "IN BOOLEAN MODE")
# => SELECT * FROM models WHERE MATCH(col1) AGAINST('+hoge +foo' IN BOOLEAN MODE);


こんな感じでいいのかな?
ANDとORは逆にしたほうがいいような気もする・・・・なあ
誰か意見くれ。
とりあえず、週末ぐらいに公開するかな。