首先,我已经看到了lucene 文档这告诉我们不要以百分比形式生成分数:
人们经常想要计算 Lucene 分数的“百分比”
确定什么是“100% 完美”匹配与“50%”匹配。这是
也称为“标准化分数”
不要这样做。
严重地。不要再试图以这种方式思考你的问题,事实并非如此
会有好的结局。
由于这些建议,我使用了另一种方法来解决我的问题。
However,lucene的论证有几点我不太明白为什么它们在某些情况下会出现问题。
对于以下情况这个帖子,我可以很容易地理解为什么它不好:如果用户进行搜索并看到以下结果:
如果 ProductA 在第一次搜索后被删除,那么用户下次再来时,如果看到以下结果,他会感到惊讶:
那么,这个问题这正是 Lucene 的文档所指出的.
现在,我们再举一个例子。
想象一下我们有一个电子商务网站正在使用“经典搜索”结合拼音搜索。此处的拼音搜索是为了避免由于拼写错误而导致最大数量的空结果。相对于经典搜索的分数,拼音结果的分数非常低。
在这种情况下,第一个想法是只返回具有至少为最高分数的 10%。即使使用经典搜索,低于此阈值的结果也不会被视为与我们相关。
如果我这样做的话我没有这个问题上面的帖子的原因是,如果删除文档,如果旧的第二个产品成为第一个产品,那么似乎合乎逻辑,并且用户不会感到非常惊讶(这与我将分数保留为浮点值的行为相同)。
此外,如果语音搜索的分数非常低,正如我们预期的那样,我们将保持相同的行为,仅返回相关分数。
So 我的问题是:按照 Lucene 建议的方式标准化分数总是不好吗?我的例子是一个例外还是即使对于我的例子来说这样做也是一个坏主意?