14

最近全文検索を試していて、スコア値の意味に興味があります。たとえば、次のクエリがあります。

SELECT table. * ,
MATCH (
col1, col2, col3
)
AGAINST (
'+(Term1) +(Term1)'
) AS Score
FROM table
WHERE MATCH (
col1, col2, col3
) 
AGAINST (
'+(Term1) +(Term1)'
)

Score の結果では、1 つのクエリの結果が 0.4667041301727 から 11.166275978088 の間であることがわかりました。関連性のMySQLの考えだと思います(高ければ高いほど重みが増します)。

私が得られないのは、MySQL がそのスコアをどのように導き出すかです。数値が 10 進数などで返されないのはなぜですか?

「IN BOOLEAN MODE」というクエリを実行すると、スコアが常に 1 または 0 を返すのはなぜですか? すべての結果が 1 ではないでしょうか。

啓蒙を願うばかりです。ありがとう。

4

2 に答える 2

12

クエリ「word1 word2」を例にとります。

BOOLEAN モードは、クエリ全体がドキュメントと一致することを示します (たとえば、word1 と word2 の両方が含まれます)。ブール モードは厳密に一致します。

通常使用される式は、検索のベクトル空間モデルに基づいています。非常に単純化されており、単語がクエリにとってどれほど重要であるかを判断する 2 つの尺度を計算します。用語の頻度 (ドキュメントで頻繁に発生する用語は他の用語よりも重要です) と逆ドキュメント頻度 (多くのドキュメントで発生する用語は、少数のドキュメントで発生する用語よりも重みが低くなります)。これはtf-idfとして知られており、ベクトル空間モデルの基礎として使用されます。これらのスコアは、他の誰かが完全に説明できるベクトル空間モデルの基礎を形成します。:)

于 2008-10-24T11:57:54.770 に答える
8

一般に、関連性は、検索に指定された単語と各行が一致する数に基づいています。正確な値はさまざまなことに依存しますが、実際には、同じクエリ内の他の関連値と比較する場合にのみ重要です。

その背後にある数学が本当に必要な場合は、internals manualで見つけることができます。

于 2008-10-23T15:36:41.377 に答える