2011-08-06 16 views
0

"title"、 "description"などのビデオデータがあるテーブルがあります。MySQL全文索引付きの検索エンジンを作成しようとしています。 SQLのクエリはいくつかの単語で動作しますが、すべての単語では動作しません。ここに私のSQLクエリです。私は、クエリ用語で "XXXXXXXX" を置き換えるMySQL Fulltext(Not)検索

SELECT * 
FROM videos 
WHERE MATCH (title, description) AGAINST ('XXXXXXXXXX' IN NATURAL LANGUAGE MODE) 

。それは "otomotiv"で動作しますが、 "otomoti"では動作しません。 "otomoti"が "otomotiv"という単語全体の一部であるので、 "otomotiv"を見つけたら "otomoti"を見つける必要はありませんか?

「NATURAL LANGUAGE MODE」または「QUERY EXPANSION」の検索モードに変更しようとしましたが、運がまだありません。

通常、MySQLは単語全体の一部を見つけることができませんか?

答えて

2

ワイルドカード演算子をサポートするため、ブール型フルテキスト検索を実行する必要があります。
http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

SELECT * 
FROM videos 
WHERE MATCH (title, description) AGAINST ('otomoti*' IN BOOLEAN MODE) 
+0

それは、おかげで動作します。だから、 "potomotiv"のような他のバリエーションがあるかもしれないので、AGAINST( '* otomoti *' in BOOLEAN MODE)と書くのは賢明でしょうか? (アスタリスクb/cには申し訳ありませんが、アスタリスクの間は太字で表示されます)。 –

+0

いいえ、単語の先頭にアスタリスクを置くことはできません。部分文字列検索を実行する場合は、「LIKE」演算子を見てください。 –

+0

"LIKE"は "FULLTEXT"よりも遅いと思った。それが本当なら、FULLTEXTを守らなければならないのですが、そうですか?このリンクでも議論されています。http://forums.mysql.com/read.php?24,126294 "LIKE"を使用する方が良いかどうかはわかりません。 –