solr 之 BM25-排序算法
对于给定的查询 Q,包含关键词 $q_1$, …, $q_n$,那么对于文档 D 的 BM25 的得分:
\[score(D, Q) = \sum_{i=1}^n IDF(q_i) \cdot \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot (1 - b + b \cdot \frac{\lvert D \rvert}{avgdl})}\]其中:
$f(q_i, D) $ : 表示词 $q_i$ 出现在文档 D 中的次数
$ \lvert D \rvert$ : 表示文档 D 的长度,也就是包含字的个数
avgdl (average document length) : 表示一个文档集合中,文档的平均长度
$k_1$、$b$ : 常数。$k_1 \in \left [1.2, 2.0 \right] $,$b = 0.75$
$IDF(q_i)$ : 表示逆文档频率,表示查询词 $q_i$ 的权重。它的计算方式如下:
\[IDF(q_i) = \log \frac{N - n(q_i) + 0.5}{n(q_i) + 0.5}\]$N$ : 表示集合中文档的总数
$n(q_i)$ : 表示包含关键词 $q_i$ 的文档个数
在 solr 中:
\[{ } tfNorm = \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot (1 - b + b \cdot \frac{\lvert D \rvert}{avgdl})}\]当 omitNorms="true"
时:avgdl = 1