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と連動させる予定だけど、そのへんは次回。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>