1

MySQL 5.6 には次のテーブル構造があります。

CREATE TABLE `dictionary` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `word` varchar(80) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `word` (`word`)
) ENGINE=InnoDB;

CREATE TABLE `sentences` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sentence` varchar(254) NOT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `sentencefulltext` (`sentence`)
) ENGINE=InnoDB;

辞書にある単語のいずれかを含むすべての文を返したいと考えています。単語の境界はあまり気にしません。基本的な部分文字列にすることができます。

フルテキスト MATCH AGAINST は文字列でのみ機能し、別のテーブルからの選択では機能しないようです。LIKE と REGEXP に関しては、私の辞書には約 50 万行の文と 5 万行の単語があるため、長い時間がかかるようです。

1 つのオプションは、プログラムで行ごとに辞書を調べ、各行で選択を呼び出すことですが、1 つの SQL ステートメントでそれを実行したいと思います。

誰かがアイデアを持っている場合は、共有してください。

ありがとう!

4

1 に答える 1

0

このようなことを試してください -

 SELECT *
      FROM `sentences`,'dictionary'
     WHERE INSTR(word,''+sentence+'') > 0

% 記号で like を使用する場合 - 索引付けがないため、速度が遅すぎるため、全文検索が必要になる場合があります。

http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

于 2012-11-07T13:58:39.647 に答える