2011-11-15 10 views
0

2つの列に対してFULLTEXT検索を実行しようとしています。FULLTEXT検索が2番目の列で機能しない

|   name   |  also_match  | 
----------------------------------------------------- 
| Information Technology | IT I.T.   | 
| Mathematics    |      | 
| English     |      | 
| Religious Studies  | RS R.S. RE R.E. | 

スキーマの詳細:

これらの列の両方VARCHAR(100)であり、IはFULLTEXTインデックスの複数のタイプを試みた最初の列は、被験体の名前、などの第2の列の別名を保持します。私は両方の列に対して別々のインデックスを試しましたが、私は両方の列を一緒にカバーするインデックスを試しました。

検索結果は名前列に基づいて結果を返すのにうまく機能しますが、何も表示されません。 0の結果を返します

SELECT * 
FROM subjects 
WHERE MATCH(s.name, s.also_match) AGAINST ('*Information*' IN BOOLEAN MODE) 
LIMIT 20 

例クエリ:1件の結果を返します

例クエリ

SELECT * 
FROM subjects 
WHERE MATCH(s.name, s.also_match) AGAINST ('*IT*' IN BOOLEAN MODE) 
LIMIT 20 
+0

テーブルの完全なスキーマと働いていないいくつかのサンプルクエリを投稿してください。 – nikhil500

答えて

0

私はあなたの問題は、MySQLは以下索引語短くないということだと思います一定の長さ。その長さはft_min_word_len変数で指定されます。例えば

、あなたの表は、このあると仮定すると:

+------------------------+------------+----+ 
| name     | also_match | id | 
+------------------------+------------+----+ 
| Information Technology | IT I.T. | 1 | 
| Mathematics   |   | 2 | 
| Religious Studies  | RS   | 3 | 
| Computer Studies  | C.S. CSSS | 4 | 
+------------------------+------------+----+ 

その後、次のクエリは動作します:

SELECT * FROM `fulltext` f 
WHERE MATCH (also_match) AGAINST ('CS*' IN BOOLEAN MODE); 

+------------------+------------+----+ 
| name    | also_match | id | 
+------------------+------------+----+ 
| Computer Studies | C.S. CSSS | 4 | 
+------------------+------------+----+ 

あなたはft_min_word_lenを短くする場合、それは残念ながらサーバ全体に影響を与え、 FULLTEXTインデックスをもっと大きくする可能性があります。

本当に短いキーワード、またはbuild your own fulltext searchを検出する場合は、also_matchでもLIKEを使用する必要があります。

これらの全文検索エンジンの1つはまた、あなたの問題を解決することができるかもしれない:

+0

申し訳ありませんが、追加情報が追加されました。 – BadHorsie

+0

答えを更新しました。 –

+0

ありがとう、私はこれが答えだと思います。 – BadHorsie

0

は、あなたが使用していることを確認していますBOOLEANモードではアスタリスクが正しく表示されますか?

アスタリスクは、トランケーション(またはワイルドカード)演算子として機能します。他の演算子の とは異なり、影響を受ける単語に追加する必要があります。 単語が*演算子の前の単語で始まる場合、単語は一致します。

http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html

+0

私は1つのワイルドカードを追加するように修正しようとしました。違いはありません。 – BadHorsie

関連する問題