重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (2件)

文章自体を表に保存してその文章から特定の文字列を持っているものを


探すという処理はリレーショナルDBの弱点であまり向いてません。
なぜなら

WHERE 本文 like "%xxxx%"

というような検索ではインデックスが使えないからです。
MySQL にも全文検索インデックスがあるようですが、日本語には対応
していないようですね。(強引に使えるようにする仕組みを考えた
方もいるようですけど・・・)
日本語文章をRDBMSで管理するとすれば、文書(テキスト)から
そのテキストの中に含まれている単語なりのキーワードを抜き出して
どの文章にどの単語が含まれているのかという関係を表にして管理する
方法を用いるという感じにすればいいかと思います。

文書番号 文章本体 (or 外部ファイル名)
------- --------------------------
1 今日はよい天気です。
2 ...
:

文章番号 キーワード
-------- ----------
1 今日
1 天気
:


キーワードも冗長なので正規して単語表(単語番号、キーワード)
などとしてもいいかもしれません。

本文から単語などのキーワードを抜き出す方法にもいろいろな
ノウハウがあります。(形態素解析)
有名な方法としては分かち書き(ちゃせん、かかしなどフリー
ソフトがあります)を使う方法や、Nグラムを使う方法などが
あります。
本文から意味のあるキーワードを抜き出す方法が日本語の全文
検索の難しいところで、それによって検索の良し悪しが決まって
きます。
Namazu などファイルベースの全文検索エンジンの仕組みを使う
というのも手軽で楽な方法かもしれません。

参考URL:http://www.slis.keio.ac.jp/~atsushi/webdb/mysql_ …
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/03/04 00:46

直接の回答ではありません。



商用データベースのOracleの場合は、interMedia, Oracle Textなどの
機能があり、それを使って全文検索用のデータベースを作成することが
できるらしいです。(使ったことはありません。)

なんでもフリーで作るのではなく、目的に合わせて商用データベースを
利用することも検討しましょう。
(今更遅いかもしれませんが)
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/03/04 00:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!