2012-04-01 5 views
3

私はWebアプリケーションで作業しており、クエリに関する助けが必要です。ほとんどの検索結果からMY_SQL全文

SELECT id, name, city, state, country, date 
FROM events_search 
WHERE MATCH(name, city, state, country) 
AGAINST ('$str') 

あなたは私が名前、市、州および国が含まれているインデックスを使用して、ユーザーが入力した文字列とそれにマッチしています見ることができるように:私は、これはそれが探している方法です、フルテキストを使用しています。この文字列には、今説明したフィールドの任意の組み合わせを含めることができます。ですから、私はdbにクエリを行い、最も関連性の高い結果を見つけて、それらをユーザーに表示する必要があります。今のところそれはうまくいっていますが完璧ではありません。例えば

:ユーザーはフロリダ州マイアミに入った場合は、最初の5つの結果は、マイアミで、フロリダの他の都市です。次の5つはマイアミアリゾナ州にあります(私はこの1つを見せたくありません)、その後はフロリダとマイアミ(フロリダ)にあるより多くの結果を得るでしょう。だから私がしたいことは、より多くの時間発見されたフィールドを決定し、このフィールドが上にある結果を表示することです。このケースでは、結果の70%がフロリダ州にあるので、フロリダになります。

答えて

0

SELECT句のあなたの全文検索を含めると、あなたは、MySQLはそれは考えてどのように関連し、スコアを取得します。それが2回同じ検索条件をだと、オプティマイザチェック、クエリが遅くなることはありません

SELECT 
id, 
name, 
city, 
state, 
country, 
date, 
MATCH(name, city, state, country) AGAINST ('$str') AS relevancy 
FROM 
events_search 
WHERE 
MATCH(name, city, state, country) AGAINST ('$str') 
ORDER BY relevancy DESC 

。あなたの「マイアミアリゾナは」後で「マイアミ(フロリダ州)」よりも表示されるはずですORDER BY句で

関連する問題