あなたの問題は、優先順位付けされたブールクエリの作成に関連しており、このタイプのクエリでは、ブール検索の詳細と、ブール検索がどのように実行されるかについて説明する必要があります。簡単に言えば、結果の 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 という単語を使用するとクエリが少し遅くなることはわかっていますが、他に解決策はありません。これでクエリが解決することを願っています。