2009-09-17 17 views
9

私はMySQLのフルテキスト検索に取り組んでいますが、文字列がフィールド内の単語の一部である状況ではそれが欠けていると感じています。フィールドが「ニューヨークタイムズ」で、「時間」を検索しても結果は得られません。私はこの問題を解決するために、私のフルテキスト検索を設定することができますどのような方法がありますMYSQL Fulltext search and LIKE

SELECT * FROM ___ WHERE 'string' LIKE %searchterm% 

を:この問題を解決するためのハック方法は、2つのクエリを設定するには、フルテキスト検索とし、他にないものですだから私は余分なクエリを実行する必要はありません?

答えて

2

私は基本的に、MySqlのフルテキスト検索を、Sphinxに委ねています。これはMySqlのネットワークプロトコルを実装した専用の全文検索エンジンで、クライアントとMySqlサーバーの間に「介入」することができます。豊かで真剣なフルテキスト機能を得ることができます。たぶんあなたのニーズに合っていないかもしれませんが(それは完全には表現していませんが)、少なくとも仕事をチェックしていると思います!

+0

クールに感謝します。私の質問を明確にするために。 私はニューヨークジャイアンツのフィールドを持っています。それを全文索引に追加して「巨人」を検索すると、何も出てこないでしょう。このような場合にフルテキスト検索を使用して結果を返すにはどうすればよいですか? 私はスフィンクスをチェックします。 –

+0

@Russさん、ありがとうございます**あなたは** pluginsを探しています(mysql 5.1の場合、5.0はサポートしていません)。 http://www.mnogosearch.org/doc/msearch-udmstemmer.html。 –

+0

ありがとう、アレックス、私は助けに感謝します。 Unfortunatley、私の手が縛られ、私はmysql 5.1にアップグレードできません。しかし、私はちょっと混乱しています。私は、5.0ではカスタマーパーサーは使用できませんが、これは5.0でステミングを行うネイティブのmysqlメソッドがないことを意味していますか? –

6

全文検索でワイルドカードを使用できます。詳細情報here

SELECT * FROM _____ WHERE MATCH (title) AGAINST ('time*' IN BOOLEAN MODE); 
+0

hmmm niceいいね。私はそれを考えなかった。唯一の問題は、 "タイミング"とそのような言葉にマッチしないので、ステミングの貧弱な代替物です。全文検索とLIKE%...%の文字列検索に一致するようにしました。その少し退屈で、余分なクエリですが、かなり堅実な結果を生成します。 –

+0

これは、検索が逆の場合にも役立ちません。たとえば、データには単語「ipad」が含まれていますが、ユーザーは「ipads」を検索します。この場合、ワイルドカードは役に立ちません。 – Vincent

+0

@Arnold 'LIKE%...%'は、SQLがインデックスを使用しないため、パフォーマンスを低下させます。あなたがそのアプローチに行くなら、あなたはおそらく全文検索を必要としません。 – PeerBr