2009年2月11日水曜日

MySQLの FULLTEXTインデックスと MATCH AGAINSTによる検索

FLLTEXTインデックスについて
  • MyISAMのみ
  • 設定ファイルで検索対象の最低文字数を設定する(デフォルトは4)
    [mysqld]
    ft_min_word_len=1
  • TEXT型の列などにスペース区切り等で区切ったデータを入れ、FULLTEXTインデックスを付与する
  • 該当データが全体の50%を超えるような単語は検索対象から除外されるので注意
  • 日本語でもOK

FULLTEXTインデックスを付与された列は、MATCH AGAINSTによる検索ができる。
SELECT * FROM members
WHERE MATCH keywords AGAINST('メロン');

さらに、マッチはしないが関連しそうなデータも含める「クエリ拡張」というオプションもある。
SELECT * FROM members
WHERE MATCH keywords AGAINST('ソーダ' WITH QUERY EXPANSION);
「注記 :ブラインド クエリ拡張は関連性のない雑多な資料も戻しがちなため、検索フレーズが短い時にだけ使用することをお薦めします」そうだが。


参考:
 MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.7 全文検索関数
 MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.7.2 クエリ拡張を伴う全文検索
 [ヅラド] MySQL を使った全文検索 (Full-Text Search)
 MySQL FULLTEXT + Ngram : LIKE検索より数十倍高速な、お手軽 日本語全文検索 について|blog|たたみラボ

0 件のコメント:

コメントを投稿