メインコンテンツまでスキップ

関連性スコアリング

概要

テキスト検索スコアリングは、指定されたクエリテキストに対してテーブル内の各行がどの程度関連性があるかを測定します。 フルテキスト検索述語(MATCH_ANYMATCH_ALLなど)を含むクエリを実行する際、Dorisは各行に対して数値スコアを計算し、クエリとの一致度を表現します。 このスコアはクエリ結果のランキングに使用でき、クエリに最も関連性の高い行が最初に表示されるようになります。

Dorisは現在、テキスト関連性スコアリングに**BM25 (Best Matching 25)**アルゴリズムを使用しています。

BM25アルゴリズム

BM25は、用語頻度、逆文書頻度、レコード長を考慮して、レコードがクエリ用語とどの程度よく一致するかを評価する確率的関連性アルゴリズムです。 従来のTF-IDFモデルと比較して、BM25はより高い堅牢性と調整可能性を提供し、長いテキストと短いテキスト間のスコア差を効果的にバランスします。

数式

BM25スコアリングのコア数式は以下の通りです:

score = IDF × (tf × (k1 + 1)) / (tf + k1 × (1 - b + b × |d| / avgdl))

説明:

  • tf – 現在の行におけるクエリ用語の頻度
  • IDF – 逆文書頻度、全行にわたって用語がどれほど稀であるかを示す
  • |d| – 現在の行の長さ(分析後のトークン数)
  • avgdl – テーブル内の平均行長
  • k1b – アルゴリズム調整パラメータ

デフォルトパラメータ:

ParameterDefaultDescription
k11.2用語頻度がスコアに与える影響の強さを制御します。
b0.75長さ正規化の強度を制御します。
boost1.0オプションのクエリレベル重み付け係数。

サポート統計:

IDF = log(1 + (N - n + 0.5) / (n + 0.5))
avgdl = total_terms / total_rows

ここで:

  • N – テーブルの総行数
  • n – クエリ用語を含む行数

行の最終スコアは、すべてのクエリ用語のBM25スコアの合計です。

DorisでのScoringの使用

サポートされるインデックスタイプ

  • Tokenized inverted index – BM25スコアリングをサポートします。
  • Non-tokenized inverted index – 完全一致のみをサポートし、スコアリングは計算されません。

サポートされるクエリタイプ

  • MATCH_ANY
  • MATCH_ALL
  • MATCH_PHRASE
  • MATCH_PHRASE_PREFIX
  • SEARCH

Query Pushdownルール

inverted indexエンジンへのスコアリングpushdownを有効にするには、以下の条件を満たす必要があります:

  1. SELECT句にscore()関数が含まれること。
  2. WHERE句に少なくとも1つのMATCH_*述語が含まれること。
  3. クエリがスコア結果に基づくORDER BY句を持つTop-Nクエリであること。

SELECT *,
score() AS relevance
FROM search_demo
WHERE content MATCH_ANY 'text search test'
ORDER BY relevance DESC
LIMIT 10;

このクエリは、検索語句に最も関連性の高い上位10行を、BM25スコアでランク付けして返します。

+------+-----------------------------------+---------+--------------+-----------+
| id | content | author | publish_date | relevance |
+------+-----------------------------------+---------+--------------+-----------+
| 1 | Full text search engine test demo | Alice | 2024-01-01 | 2.915228 |
| 7 | Text processing techniques | Grace | 2024-01-07 | 1.341931 |
| 5 | Performance test framework | Eve | 2024-01-05 | 1.341931 |
| 3 | Advanced search algorithms | Charlie | 2024-01-03 | 1.341931 |
+------+-----------------------------------+---------+--------------+-----------+

結果の解釈

  • スコア範囲 – BM25スコアは正の値で上限がありません。相対的な大きさのみが重要です。
  • 複数の用語 – 複数用語のクエリの場合、総スコアはすべての用語スコアの合計です。
  • 長さの影響 – 同じ用語を含む場合、短い行の方が一般的に高いスコアを受け取ります。
  • 一致する用語なし – クエリ用語のいずれもテーブルに現れない場合、スコアは0です。