2009-04-28 33 views
1

私は自分のウェブサイトの検索機能に取り組んでいます。私はユーザーに最良の検索メカニズムを提供したいと考えています。私はPHP/MYSQLを使用しています。MySQLのフルテキスト検索?

はのは、ユーザが「スポーツ」で検索しましょう。

私は単語「スポーツ」と「スポーツ」が、私はスポーツを探していたときに、次のクエリは、結果だけの単語「スポーツ」を持って30を返す言葉を持つ5つのレコードを持つ30件のレコードを持っています。しかし実際には、良い検索結果を提供する最良の方法は、すべての30 + 5レコード、スポーツやスポーツを持つすべてのレコードを表示することだと思います。

SELECT DISTINCT p.id, p.title, p.descr, p.tags FROM pdata p WHERE MATCH (p.title, p.tags, p.descr) AGAINST ('sport') 

私にいくつかの記事や私は良い検索機能を提供することができるでしょう&トリックが使用していくつかのヒントを教えてください。

答えて

2
...MATCH (p.title, p.tags, p.descr) AGAINST ('sport*' IN BOOLEAN MODE) 

トリックを行うことがあります。

編集、MySQL documentationは問題のこれらの種類のための優れたリソースです! :)

+0

ターゲットを叩いてください:) wow。ちょっと、その完璧な作業。しかし、なぜ私に前にデータを与えていないのか分かりません(*とBOOLEAN MODEキーワードなし)?教えてください。 – Prashant

+0

しかしもう一つの問題があります。タイトル、タグ、およびdescrの列に "ipl"という単語がある5つのレコードを持っているのに対し、私はAGAINST( 'ipl *' in BOOLEAN MODE)を探しています。それでなぜその結果が返ってくるのか。私が "ICL"を検索しているときに、その結​​果が0であるのに対し、ICLを持っているレコードが1つあります。 – Prashant

0

はちょうどあなたの検索文字列の%ワイルドカードを使用します。これにより、検索文字列によって形成されたすべての単語を一致させることができます。残念ながら、このワイルドカードが動作するにはブールモードにする必要があります。また、全文検索を使用して表示するには、すべての検索文字列が3文字以上でなければなりません。これはMySQLのシステム設定で変更することができますが、デフォルトでは、私は次のクエリになるだろうあなたのケースでは3

0

です:

SELECT p.id、p.title、p.descr、P (p.titleがLIKE '%スポーツ%' OR '%スポーツ%' OR '%スポーツ%' LIKE p.descr LIKE p.tags)

このクエリは見つけるだろうPDATA Pから.tags スポーツマガジン、サマースポーツなどをカバーする記事。

関連する問題