全文検索 on Rails
railsで全文検索するのに、LIKEを使うだけのぬるーい実装をしてたんだけど(SQLをごりごり書こうとしたらこんがらがったのでやめた)、もうちょっとスマートにやる方法を考えてみる。 色々調べたところ、Hyper Estraierとsearch_doプラグインを使うのが一般的らしい(と言っても情報は少なめ)。
というわけで既存のプロジェクトで実験してみた。 基本的には http://d.hatena.ne.jp/shunsuk/20090406/1239020647 の通りで動いたけど、ノードについてはデフォルトのままmodel名を後にくっつける(xxxx_itemみたいな)形式にした。複数のmodelを検索する場合はその方が良いと思う。 キーワード一つだけの検索はすぐできたんだけど、ANDやOR検索がうまく行かない。search_doのドキュメントは放置状態で何もない。しょうがないのでプラグインのソースを読む。やっぱり分からない。(ダメじゃん) 答えはHyper EstraierのAPIドキュメントにあった。AND/OR/ANDNOTではなく、&/|/!を使えば良かった。 ちなみにmodelを更新すると自動的にreindexされるので、sweeperに仕込んだりする必要はなかった。 他のクエリやwill_paginateと連動させる予定だけど、そのへんは次回。