相关性打分

更新时间:
复制为 MD 格式

相关性打分用于衡量表中某一行数据与查询文本之间的相关程度。 当执行包含全文检索条件的查询(例如 MATCH_ANYMATCH_ALL 等)时,SelectDB 会为每一行返回一个数值型的打分结果,表示该行与查询条件的匹配强度。 该打分值可用于结果排序,以便优先返回与查询最相关的内容。

说明

当前 SelectDB 使用 BM25(Best Matching 25) 算法进行文本相关性计算。

BM25 算法简介

BM25 是一种基于概率模型的文本相关性算法。 它通过综合考虑词频、逆文档频率以及记录长度,对匹配结果进行加权计算。 BM25 相比传统 TF-IDF 模型具有更好的鲁棒性和可调性,能有效平衡长文本与短文本的得分差异。

算法公式

BM25 的核心计算公式如下:

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

其中:

  • tf:查询词在当前行中的出现次数

  • IDF:逆文档频率(衡量词的稀有程度)

  • |d|:当前行的长度(即被分词后的词元数)

  • avgdl:表中所有行的平均长度

  • k1, b:算法调节参数

默认参数:

参数

默认值

说明

k1

1.2

控制词频对得分的影响程度

b

0.75

控制记录长度归一化的强度

boost

1.0

查询级别的权重因子

辅助统计量:

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

其中:

  • N 表示表中总行数;

  • n 表示包含该查询词的行数。

最终的总得分为所有查询词的单词得分之和。

在 SelectDB 中使用打分

支持的索引类型

  • 分词型倒排索引:支持 BM25 打分计算。

  • 非分词型倒排索引:仅支持精确匹配,不计算打分。

支持的查询类型

  • MATCH_ANY

  • MATCH_ALL

  • MATCH_PHRASE

  • MATCH_PHRASE_PREFIX

  • SEARCH

查询下推规则

为启用打分计算,下推条件需满足:

  1. 查询语句的 SELECT 中包含 score() 函数;

  2. WHERE 子句中包含至少一个 MATCH_* 条件;

  3. 查询为 Top-N 类型,且 ORDER BY 子句基于 score 结果排序。

示例

SELECT *,
       score() AS relevance
FROM search_demo
WHERE content MATCH_ANY '检索测试'
ORDER BY relevance DESC
LIMIT 10;

该语句会根据 BM25 打分结果返回前 10 条最相关的记录。

结果说明

  • 得分范围:BM25 得分为正数,无固定上限。通常仅比较相对大小。

  • 多词查询:若查询包含多个词项,总得分为各词项得分之和。

  • 长度影响:较短记录在包含相同词项时得分略高。

  • 无匹配词项:若查询词未出现在表中,对应得分为 0。