2012-04-06 9 views
6

は、私は少し混乱して取得しています。私は+divorce+refinanceの検索を実行するとMySQLの全文検索ブールモード混乱

$query = "SELECT *, 

     MATCH(title) AGAINST('$q' IN BOOLEAN MODE) AS score 

     FROM results 

     WHERE MATCH(title) AGAINST('$q' IN BOOLEAN MODE) 

     ORDER BY score DESC"; 

は、返された結果は次のとおりです:ここで私が使用しているクエリです

1) Divorce: Paying Off Spouse = Rate/Term Refinance 
2) Divorce - What to Look Out For Regarding Divorced Borrowers 

は、右の2番目の結果が表示されるべきではないことを考える中で、私がAMは、それは両方の言葉を持っていないので?そうでない場合は、どうすればその機能を作成できますか?

答えて

9

たぶん私は間違っていますが、あなたはこの文字列を検索する場合+divorce+refinanceあなたは奇妙な結果を得ます。 を両方ともの単語で検索する場合は、+divorce +refinance(スペースを挟んで)を検索する必要があります。

私はそれをテストし、それが唯一の1行を返します:あなたの問題を優先ブールクエリを作成に関し、クエリのこのタイプの1は、ブール検索の深さに行く必要があり、今どのように

Divorce: Paying Off Spouse = Rate/Term Refinance 
4

ブール検索が実行される。簡単な言葉で、結果の2番目の数値結果が表示される理由を説明しましょう。

一度最初のブールプログラミングで意味ないかを理解する必要がありますか? それは条件が1に電子0

、私の真または偽である今、ブール検索が実行されるために私が説明させていずれかの意味しますか?あなたは2つの言葉を与えました。ブールモードで行ごとに検索しましょう。検索エンジンを起動し、最初の単語が見つかったところで行ごとに検索します。レコードが真となり、最初の単語が見つかった行にスコア1を与え、行にある単語の数を準備します。

今では、次の単語を移動し、同じプロセスが真のレコードを与え、言葉が見つかり、また、行で見つかった単語の数を準備されている場所レコードのリストを作成します。

今結果の2つの行があるが利用可能であり、それらはこん棒され、優先度は、ここでの単語と行の最大数の単語に与えられているの主な問題があるです。

まず>>>合計号。 >> Second >>総数。 >>>最終>>行
ワード>>>結果>>単語の単語>>>>>>>結果>>なし>>


1 >>>>>>>> 2回答します>>>>>>>>>>>>>>>>>>>>>>>>>>> 1.33 >>>> 1 >>> 1.33
0 >>>>>>>> 0> >>>>>>> 2 >>>>>>>>>> 2 >>>>>>>>> 1.25 >>>> 2 >>> 1.25
0 >>>>>>>> 0 >> >>>>>> 1 >>>>>>>>> 0 >>>>>>>> 1.25 >>>> 3 >>> 1

とき真追加した2つの結果リストをクラブにしながらfalseを指定するとresultはtrueになり、1 + 0 = 1を追加した場合と同様に結果がshoulされますdの値が1以上であることを示します。したがって、検索された単語に関連性を評価しながら、検索エンジンは単語を見つけた場所に結果を表示します。

スコアリング関連性のクエリは、2つのタイプで行われます。スコアは1に等しいスコアを無視し、スコアが1より大きいレコードの計算のみを行います。2番目は、 1。あなたの場合のように、あなたはそうも以下のものが二つの単語の正しい結果を取得することができます。

SELECT *, ((1.3 * (MATCH(title) AGAINST ('+term +term2' IN BOOLEAN MODE))) + (0.6 * (MATCH(text) AGAINST ('+term +term2' IN BOOLEAN MODE)))) AS score FROM results WHERE (MATCH(title, text) AGAINST ('+term +term2' IN BOOLEAN MODE)) HAVING relevance > 0 ORDER BY relevance DESC; 

私はHAVING単語を使用すると、クエリは少し遅い作ることを知っているが利用可能な他の解決策はありません。これがあなたの質問を解決することを願っています。