Search Solr:以百分比表示的分数

Search Solr:以百分比表示的分数,search,solr,lucene,Search,Solr,Lucene,首先,我已经看到了它告诉我们不要以百分比的形式生成分数: 人们经常想计算从Lucene分数到 确定什么是“100%完美”匹配与“50%完美”匹配。这是 还有一些东西叫做“标准化分数” 不要这样做 真的。别再这样想你的问题了,不是这样的 结局会很好 由于这些建议,我用另一种方法来解决我的问题 然而,lucene的论证中有几点我真的不明白为什么它们在某些情况下是有问题的 对于的情况,我很容易理解为什么它不好:如果用户进行搜索并看到以下结果: 产品A:5颗星 产品B:两颗星 C:1星 如果Prod

首先,我已经看到了它告诉我们不要以百分比的形式生成分数:

人们经常想计算从Lucene分数到 确定什么是“100%完美”匹配与“50%完美”匹配。这是 还有一些东西叫做“标准化分数”

不要这样做

真的。别再这样想你的问题了,不是这样的 结局会很好

由于这些建议,我用另一种方法来解决我的问题

然而,lucene的论证中有几点我真的不明白为什么它们在某些情况下是有问题的

对于的情况,我很容易理解为什么它不好:如果用户进行搜索并看到以下结果:

  • 产品A:5颗星
  • 产品B:两颗星
  • C:1星
如果ProductA在第一次搜索后被删除,用户下次再来时,如果看到以下结果,他会感到惊讶:

  • 产品B:5颗星
  • C:3颗星
因此,这个问题正是Lucene的文档所指出的


现在,让我们再举一个例子

想象一下,我们有一个电子商务网站,它正在使用“经典搜索”语音搜索相结合。这里的拼音搜索是为了避免由于拼写错误而导致最大数量的空结果。语音搜索结果的分数相对于经典搜索的分数非常低

在这种情况下,第一个想法是只返回至少为最高分数10%的结果。此阈值下的结果将不会被视为与我们相关,即使是经典搜索

如果我这样做,我就没有上述帖子的问题了,因为如果删除了一个文档,那么如果旧的第二个产品成为第一个产品似乎是合乎逻辑的,用户也不会感到非常惊讶(这与我将分数保留为浮动值的行为是一样的)

此外,如果语音搜索的分数很低,正如我们预期的那样,我们将保持相同的行为,只返回相关的分数



所以我的问题是:按照Lucene的建议将分数标准化是否总是不好?我的例子是一个例外,还是对我的例子来说这样做是一个坏主意?

正如您所述,Lucene得分值仅与表示一组匹配中每个匹配的相对强度相关。在特定搜索结果集的上下文中,特定记录的分数没有绝对意义

因此,唯一合适的分数标准化方法是标准化结果集中文档相关性之间的关系,即使这样,您也需要非常小心地使用这些信息

考虑这个结果集,我们检查每个记录的分数,并将其与前一个结果进行比较:

ProductA         (Let's pretend the score is 10)
ProductB:  97%   (9.7)
ProductC:   8.5% (.82)
ProductD: 100%   (.82)
ProductE: 100%   (.82)
ProductF:  24%   (.2)
在这种情况下,前两个结果的得分非常相似,而后三个结果的得分相同,但显著落后。这些数字显然不能与在线购物者分享,但ProductC和ProductF的相对分数较低,这意味着降幅足够大,你可以用它们来通知其他显示选项。也许ProductA和ProductB的字体比其他字体大。如果只有一种产品出现在急剧下降之前,它可能会得到更特别的突出显示

我要提醒大家不要在这种搜索中完全压制得分相对较低的结果。正如您在示例中已经证明的那样,相对分数可能会产生误导,除非您对相关性进行了非常精细的调整,否则最相关的文档可能并不总是最合适的。如果由于一条记录恰好重复了搜索词足够多的次数,从而赢得了一个优异的分数,而导致所需的结果被删除,这对你没有好处,这是一个真正的威胁

例如,
“汉密尔顿海滩三合一对流烤面包机烤箱”
将在搜索
烤面包机时匹配八分之一的单词,而
“ToastMaster Toast Toaster Toasting Machine Toaster”
将根据索引方式匹配七分之五的单词。(两个产品名称都是完全虚构的,但我希望第二个看起来不那么有名气。)


而且,所有返回的文档都是匹配的,无论它们的分数有多低。有时排名较低的结果是用户真正想要的黑马发现。除非您告诉用户,否则用户不会理解在他们看到的文档之外还有匹配的文档,因此您可能会在“第2页”上隐藏尾随结果,或者隐藏在剪切后,但您可能不想阻止它们。让用户了解结果集的大小也可以帮助他们决定如何微调搜索。使用分数的显著下降作为分页的阈值可能非常有趣,但可能是一个具有挑战性的实现。

问题是,如何确定截止值,这意味着什么

看一个例子可能更容易。比如说我在试着用姓氏找人。我将搜索:

smithfield smithfield* smithfield~2 metaphone:sm0flt
  • “史密斯菲尔德”
我有以下文件,我认为它们都非常匹配:

  • 史密斯菲尔德-精确匹配
  • 史密斯菲尔德-非常接近,声音相似,只差一个(无声的)字母
  • 史密斯菲尔德-非常接近,发音相似,一个元音变了
  • 史密斯觉得——两个字母很接近,但仍然很相似
  • 斯尼思菲尔德-听起来不太像,但只差一个字母。也许是打字错误
  • smittfield-同样,听起来不太像,可能是拼写错误或拼写错误
  • 史密斯费尔特-拼写有点错误,但可能是听错了
  • smithfieldings-相同前缀
  • smithfield^4 smithfield*^2 smithfield~2 metaphone:sm0flt