2012-03-08 14 views
1

まず、私のデータはMyISAMエンジンを使用して格納されていますが、InnoDBは現時点ではLinuxでフルテキスト検索のインデックス作成をサポートしていません。しかし、私は外部キーを使用していますが、明らかにこれは参照が強制されていません。MySQLの全文検索データが外部キーに含まれています

メーカー(man_id、name)、モデル(model_id、man_id、name)と製品(man_id、model_id、要約、説明)で構成される3つのテーブルがあります。

私がしたいのは、製品テーブルのフルテキスト検索ですが、メーカー名とモデル名、要約と説明が含まれています。基本的に4つのフィールドを検索します。

フルテキスト検索は、テーブル内の列のみを索引付けでき、外部キー値ではないため、この方法では機能しません。誰かがこの効果に何かを達成する方法についてのアイデアはありますか?

+0

InnoDBはv5.6.4のようフルテキストインデックスをサポートしています。http://blogs.innodb.com/wp/ 2011/12/innodb-full-text-in-mysql-5-6-4 /あなたが望むなら、MyISAMの回避策を逃して今InnoDBに行くことができます。 –

+0

@MarcBはい、これは本当ですが、残念ながらこのバージョンはMicrosoftベースのサーバーの開発版としてのみリリースされています。 Linuxベースのサーバー(私が使用している)の最新バージョンはv5.5ですが、まだこの機能はありません。 フルテキスト検索をサポートしているInnoDBデータベースだったとします。フルテキスト検索を実行するときに、クエリの外部キーへの参照を含めてどうでしょうか? – leejmurphy

答えて

1

次の例のようにあなたは、これらのテーブルを結合し、参加に対して検索を実行できます。

CREATE TABLE `tablename` (
    `id` int(10) unsigned primary key AUTO_INCREMENT, 
    `stuff` text FULLTEXT KEY, 



) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 

CREATE TABLE `table_b` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `stuff` text, 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `index_table_b_on_text` (`stuff`) 
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 


SELECT table_a.* 
FROM table_b JOIN table_a ON table_a.id = table_b.id 
WHERE MATCH(table_b.stuff) AGAINST ("hamster") 
     AND MATCH(table_a.stuff) AGAINST ("leopard"); 
+----+---------------------------------------------+ 
| id | stuff          | 
+----+---------------------------------------------+ 
| 3 | A brown leopard jumped over a lazy hamster. | 
+----+---------------------------------------------+ 
関連する問題