6

ブールモードで全文検索を利用して検索を設定しようとすると、少し混乱します。これが私が使用しているクエリです:

$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";

の検索を実行すると+divorce+refinance、返される結果は次のとおりです。

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

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

4

2 に答える 2

9

間違っているかもしれませんが、この文字列を検索+divorce+refinanceすると、奇妙な結果が得られます。両方の単語を検索する場合は、 +divorce +refinance(間にスペースを入れて) を検索する必要があります。

私はそれをテストし、それは1行だけを返します:

Divorce: Paying Off Spouse = Rate/Term Refinance
于 2012-04-16T19:12:36.463 に答える
4

あなたの問題は、優先順位付けされたブールクエリの作成に関連しており、このタイプのクエリでは、ブール検索の詳細と、ブール検索がどのように実行されるかについて説明する必要があります。簡単に言えば、結果の 2 番目の数字の結果が表示される理由を説明します。

Boolean がプログラミングで何を意味するかを最初に理解する必要がありますか? これは、条件が true または false、つまり 0 から 1 であることを意味します。

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

次に、次の単語に移動し、同じプロセスを実行してレコードを True にし、単語が見つかった場所のレコードのリストを作成し、行で見つかった単語の数を準備します。

現在、2行の結果が利用可能であり、それらはクラブ化されており、最大数の単語を持つ単語に優先順位が与えられており、ここの行に主な問題があります.

まず >>> 総枚数 >> 2番目 >> 総数 >>> 最終 >> 行
の単語 >>> 結果 >> 単語 >>>> の単語 > > > 結果 >>いいえ >>回答


1 >>>>>>>> 2 >>>>>>>>1>>>>>>>>>1>>>>>>>>1.33>>>> 1 >>> 1.33
0 >> >>>>>> 0 >>>>>>>>2>>>>>>>>>2>>>>>>>>1.25>>>> 2 >>> 1.25
0 >>>>> >>> 0 >>>>>>>>1>>>>>>>>>0>>>>>>>>1.25>>>> 3 >>> 1

true が false で追加された場合に 2 つの結果リストをクラブしている間、結果は true です。まるで 1 + 0 = 1 を追加し、結果が 1 より大きい値を持つ必要があるかのようです。検索エンジンは、単語が見つかった結果を表示します。

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

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 という単語を使用するとクエリが少し遅くなることはわかっていますが、他に解決策はありません。これでクエリが解決することを願っています。

于 2012-04-21T19:03:11.757 に答える