acts_as_tritonn
2007/12/9追記
http://d.hatena.ne.jp/ryu00026/20071209
で公開してます
http://qwik.jp/tritonn/
TritonnはMySQLから全文検索エンジンSennaを利用可能にするための改造を行うプロジェクト。
MySQLにSenna(および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は逆にしたほうがいいような気もする・・・・なあ
誰か意見くれ。
とりあえず、週末ぐらいに公開するかな。