Java lucene默认分数是否介于0和+之间;无限的?

Java lucene默认分数是否介于0和+之间;无限的?,java,lucene,Java,Lucene,我正在使用lucene 5.2.1,我想实现我自己的排名规则。为了制定正确的规则,我需要知道Lucene的默认相关性分数(通过正常搜索得到的分数)是否总是在0到+无穷大之间 您可以在下面找到一个简单的代码来获得更好的想法 Query query = new Query(...); //some query, for example "name:foo" int maxdocs = 500; TopDocs topBusiness = searchEngine.search(query, maxd

我正在使用lucene 5.2.1,我想实现我自己的排名规则。为了制定正确的规则,我需要知道Lucene的默认相关性分数(通过正常搜索得到的分数)是否总是在0到+无穷大之间

您可以在下面找到一个简单的代码来获得更好的想法

Query query = new Query(...); //some query, for example "name:foo"
int maxdocs = 500;
TopDocs topBusiness = searchEngine.search(query, maxdocs);
ScoreDoc[] hits = topBusiness.scoreDocs;
float score = hits[0].score;
我想确定变量分数不能低于0(例如分数=0.00003可以,但分数=-1不可以)


有人知道吗?

搜索结果中的分数可能小于0!您真正需要做的就是设置一个负的提升,以看到它的作用()


如果你可以轻松地假设,你将永远不必面对负面刺激(我会说,这通常是相当安全的)。那么你应该安全地假设所有的分数都是肯定的

解释一下,分数是:

分数(q,d)=坐标(q,d)·查询范式(q)·∑ (tf(t在d中)·idf(t)2·t.getBoost()·norm(t,d))

要得到一个负的分数,至少有一件事情是负的

  • tf-不能是负的。术语不能出现在文档中-1次,因此术语频率必须为0或更高

  • idf2-这有点棘手。以色列国防军是:

    1+对数(numDocs/(docFreq+1))

    numDocs和docFreq都是积极的,因为否则我们会做出愚蠢的声明,比如我们的指数有负1项。对数是正数,这很好,因为谁想处理虚数

    我们发现idf可以是负的,也可以是正的,但它是真实的(不是想象的)。因为它在分数计算中是平方的,所以我们又有了一个确定的正数

  • coord-coord度量可用查询项与匹配查询项的重叠。由于匹配的术语最少为0,并且您不会使用少于零的术语进行查询,因此这将是正的

  • QueryForm—此规范化因子可能是最难获得的,也是实践中最不感兴趣的:

    1/(q.getBoost()2·∑ (idf(t)·t.getBoost())2)1/2

    就我们的目的而言,我们可以马上看到,一切都是平方的,所以除非它是虚构的,否则结果是正的。助推器不会是假想的,我们在上面证明了idf不会是假想的,所以再次,我们在这里看到的是正数

  • t、 getBoost()-这是负面分数出现的地方,但我们现在假设这是正面的

  • 范数-范数编码长度规范化,索引时间域增强。我们假设有积极的促进作用,所以标准也将是积极的。这有点学术性。一点测试表明默认的norm编码(长度只有一个字节)实际上不支持负数。任何编码和解码的负数都将得到0.0


所以,只有负面的提升才会带来负面的分数。评分算法中的任何其他内容都不会影响评分。

阅读文档,正如我所怀疑的,提升是唯一可能使评分低于零的因素。现在我相信了!非常感谢你的清晰、准确和完整的回答。