[前][次][番号順一覧][スレッド一覧]

mysql:7566

From: "HIGUCHI Koichi" <"HIGUCHI Koichi" <ko-ichi@xxxxxxxxxx>>
Date: Sun, 20 Apr 2003 04:16:51 +0900
Subject: [mysql 07566] 文書検索のためのテーブル設計

はじめまして、樋口と申します。

文書の検索などを行うためのフリーソフトウェアをPerl/Tk + MySQLで作製しようと
しているのですが、テーブル設計で行き詰まってしまいました。皆様のお知恵をかし
ていただけませんでしょうか。

まず、次のようなテーブルが用意されています。

#----------------#
文書ID   -   単語
1   -   今日
1   -   は
1   -   良い
1   -   天気
1   -   だ
1   -   。
2   -   明日
2   -   は
2   -   どう
2   -   かな
#----------------#

実現したいことは、単語による文書の検索です。
例えば、「今日 or 明日 >= 2」という検索式を入力して、「今日」が含まれている
か、「明日」が2つ以上含まれている文書を検索するといった具合です。

この場合、どんな方法、ないしはSQL文を用いれば、MySQLの速さを活かした検索が行
えそうでしょうか?
皆様のアイデア、あるいは参考になりそうな書籍、ホームページなどなど、お教えい
ただければ幸いです。


ちなみに、私が考えたのは次のような検索手順です。

まず、入力された検索式に含まれる単語1つ1つについて、各文書で何回出現している
かを調べ上げ、一時テーブルにその結果を保存します。

 CREATE TABLE 今日-TEMP (...中略...)
 INSERT INTO 今日-TEMP (文書ID, 出現数)
  SELECT   文書ID count(*)
  FROM     冒頭のテーブル
  WHERE    単語 = '今日'
  GROUP BY 文書ID

次に、「今日-TEMP」、「明日-TEMP」などの一時テーブルを全てJOINして、条件に合
致するレコード(文書ID)を取り出すというものです。

 SELECT 文書ID
 FROM   文書IDリスト
  LEFT JOIN 今日-TEMP ON 文書IDリスト.文書ID = 今日-TEMP.文書ID
  LEFT JOIN 明日-TEMP
 WHERE  ...

しかしこの方法では、検索式に32種類以上の単語が含まれていた場合、「Too many
tables. MySQL can only use 31 tables in a join」という制限にぶつかってしまい
ます。

かといって、次のようなテーブルをあらかじめ作っておくことには、ちょっと気後れ
しています。
#--------------------------------#
文書ID   -   今日   -   明日 ...
1   -   1   -   0   ...
2   -   0   -   1   ...
3   -   0   -   0   ...
#--------------------------------#
10万以上(単語の種類数)フィールがあって、中身はほとんど0というスパースな
テーブルになってしまうけど、良いのかなぁ、、、と気後れしています。
(大半の語は1回か2回しか出現しないためです)

MySQLはおろかSQLにすら十分には慣れていないのですが、宜しく御願い致します。

# なお現状としては、この程度のものがなんとか動いてるという状態です。
# http://koichi.nihon.to/psnl/khcoder/linux_fig.html

# Namazuはどうやっているのだろうと思って調べかけたのですが、、、
# インデックス・ファイルの仕様を眺めただけでは、良く分からなかったです・・
・。

大阪大学 大学院 博士課程
樋口耕一




[前][次][番号順一覧][スレッド一覧]

->    7566 2003-04-20 04:16 ["HIGUCHI Koichi" <ko] 文書検索のためのテーブル設計            
      7567 2003-04-20 04:59 ┣[Shinya Kawaji <kawaj]                                       
      7568 2003-04-20 05:07 ┣[Shogo <shogo@xxxxxxx]                                       
      7569 2003-04-20 06:51 ┣["KAWAI,Takanori" <GC]                                       
      7570 2003-04-20 09:40 ┗["HIGUCHI Koichi" <ko]