• ベストアンサー

DB全文検索について

このたび、この「教えてGoo」「オンラインショップ』等ののような検索システムを作ることになりました。 「教えてGoo」質問検索の欄にキーワードを入れると、検索されますが、おおよそ40万件の質問や回答の中からすぐ検索結果がでてきます。そのままWhere句で検索してるはずないと感じました。このような全文検索系をデータベースでやる場合のテーブル構成等のテクニックをお教えいただけないでしょうか。よろしくお願いいたします。使用するDBはMySQLです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

文章自体を表に保存してその文章から特定の文字列を持っているものを 探すという処理はリレーショナルDBの弱点であまり向いてません。 なぜなら WHERE 本文 like "%xxxx%" というような検索ではインデックスが使えないからです。 MySQL にも全文検索インデックスがあるようですが、日本語には対応 していないようですね。(強引に使えるようにする仕組みを考えた 方もいるようですけど・・・) 日本語文章をRDBMSで管理するとすれば、文書(テキスト)から そのテキストの中に含まれている単語なりのキーワードを抜き出して どの文章にどの単語が含まれているのかという関係を表にして管理する 方法を用いるという感じにすればいいかと思います。 文書番号 文章本体 (or 外部ファイル名) ------- -------------------------- 1 今日はよい天気です。 2 ... : 文章番号 キーワード -------- ---------- 1 今日 1 天気 : キーワードも冗長なので正規して単語表(単語番号、キーワード) などとしてもいいかもしれません。 本文から単語などのキーワードを抜き出す方法にもいろいろな ノウハウがあります。(形態素解析) 有名な方法としては分かち書き(ちゃせん、かかしなどフリー ソフトがあります)を使う方法や、Nグラムを使う方法などが あります。 本文から意味のあるキーワードを抜き出す方法が日本語の全文 検索の難しいところで、それによって検索の良し悪しが決まって きます。 Namazu などファイルベースの全文検索エンジンの仕組みを使う というのも手軽で楽な方法かもしれません。

参考URL:
http://www.slis.keio.ac.jp/~atsushi/webdb/mysql_5.html
snake103
質問者

お礼

回答有難う御座いました。 大変返事が遅くなってしまい申し訳御座いませんでした。 大変参考になりました。 (現状では運営後、調整していくということでおさまりました) またの機会に宜しくお願い致します。

その他の回答 (1)

  • yuji
  • ベストアンサー率37% (64/169)
回答No.1

直接の回答ではありません。 商用データベースのOracleの場合は、interMedia, Oracle Textなどの 機能があり、それを使って全文検索用のデータベースを作成することが できるらしいです。(使ったことはありません。) なんでもフリーで作るのではなく、目的に合わせて商用データベースを 利用することも検討しましょう。 (今更遅いかもしれませんが)

snake103
質問者

お礼

回答有難う御座いました。 大変返事が遅くなってしまい申し訳御座いませんでした。 またの機会に宜しくお願い致します。

関連するQ&A