之前一直以为,无论在index或搜索时,如果boost为0,結果将不会得出。但今天经过测试,不是这样的。
来看它的评分公式吧,其中一项就是 queryNorm(q) ,它是这样计算的:
1/sumOfSquaredWeights½
但这样可能遇到分母为0的情况,于是在Query中的weight()中作了修正 :如果是infinite则为1.
不过,由此我又想到了是否出现异常的情况,发现,如果是1/0这种情况是会有异常的;但如果是float或double不会出现异常,只是返回Infinity 。
不过,造成评分結果为0 的原因 并不是上述 的fatcor,而是公式后面的求和项引起 的。
score(q,d) = coord(q,d) · queryNorm(q) · | ∑ | ( tf(t in d) · idf(t) 2 · t.getBoost() · norm(t,d) ) |
t in q |
其中t.getBoost()时搜索的; norm()是索引时的field boost和查询时的doc boost构成 。
总之,score为0时只表明在similarity上不会加分,所以如果确实某些查询不需要这情况时,可以作为filter而不是query来提交效率。