我不太清楚我对你是指查询清楚,但我们说的情况是这样的:
如果您搜索“gonzaga”,则文档B将获得更高的分数,因为尽管每个名称中有一个匹配,但文档B的名称短得多,只有三个词,而较短的字段更重。这是LengthNorm指的是TFIDFSimilarity documentation。
但还有其他因素。如果我们只是扔掉每个名称到的QueryParser,看看会发生什么吧,是这样的:
Query queryA = queryparser.parse(docA.name);
Query queryB = queryparser.parse(docB.name);
然后生成的查询是很大的不同:
name:carlos name:fernando name:luis name:maria name:victor name:miguel name:rafael name:gabriel name:gonzaga name:xavier name:francisco name:de name:assis name:jose name:simao name:de name:braganca name:baboia name:bourbon name:e name:saxe name:coburgo name:gotha
VS
name:tomas name:antonio name:gonzaga
有为什么这些会产生不同的分数是很多原因。上面讨论的lengthNorm,可以提高匹配更多查询词的结果的coord因子很可能会起作用tf,这会使文档中更多的词匹配更多的idf,这更适合于整个词出现频率较低索引等。
得分只与查询运行的结果集相关。对查询或索引状态的更改可能会导致不同的分数,而且它们不打算具有可比性。您可以使用IndexSearcher.explain来了解如何计算分数。
“这些产生相同分数的原因有很多。”你的意思是为什么他们不会**得到相同的分数?在你的例子中,queryA和queryB,让我们说,对于queryA响应,我们得到带有SCR1分数的DocB,对于queryB响应,我们得到带有SCR1的DocA。这两个分数是否相同。看起来不会,但只是想澄清问题 – Ganesh
对,你不会指望得分相等。即使在这些只有两个文档的简单情况下,lengthNorm,coord因子和queryNorm也会不同。 – femtoRgon