メイン

[MySQL][Rails] MySQL+Sennaの全文検索でスコア順にソートする。

こんにちわ。ばたっちです。

MySQL+Sennaな環境の全文検索について覚書。

  • 日本語でAND検索する→BOOLEAN MODEかつ「*D+」を付与
  • BOOLEAN MODEだとスコア順にならない→match() against()がスコアを返す

それぞれ反映したら SQLはこんなカンジになります。


SELECT *, match(text) against('*D+ 単語1 単語2' in boolean mode) AS score
  FROM table1s
 WHERE match(text) against('*D+ 単語1 単語2' in boolean mode)
 ORDER BY score DESC;

無理やり Railsにからめて(^^;、ActiveRecordではこんなカンジ。


match = "match(text) against('*D+ #{terms.join(' ')}' in boolean mode)
results = Table1.find(:all, :select => "*, #{match} AS score",
                      :conditions => match, :order => "score DESC")

これで BOOLEAN MODEでもマッチ率順になるので、LIMITで上位件数の絞込みできますね。φ(.. )

トラックバック

このエントリーのトラックバックURL:
http://pw.tech-arts.co.jp/cgi-bin/tamt32/mt-tb.cgi/66

この一覧は、次のエントリーを参照しています: [MySQL][Rails] MySQL+Sennaの全文検索でスコア順にソートする。:

» 第2回 Rails開発者向け全文検索エンジンSolrの無料セミナー開催 from 関口宏司のLuceneブログ
Ruby on Rails開発者向けに全文検索エンジンSolrの入門セミナー(無料)を開催する。 日時:7月16日(水) 14:00-16:00 ... [詳しくはこちら]

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)