比较两个solr文档
我试图使用solr查询,基于一个公共的“name”字段,比较solr中的两个文档(比如doca、docb)。基于查询A.name,我得到一个结果文档B,其关联性得分为say SCR1。现在,如果我以相反的方式进行查询,即我用B.name查询,然后我在结果的某个地方得到了文档A,但是这次B和A的分数是而不是相同的SCR1 我相信这是因为文件A.name和文件B.name中的术语数量不同,所以相似性分数不一样。这是造成这种差异的原因吗 无论哪种方式我都能得到相同的分数吗(如上所述)?比较两个solr文档,solr,lucene,solr4,Solr,Lucene,Solr4,我试图使用solr查询,基于一个公共的“name”字段,比较solr中的两个文档(比如doca、docb)。基于查询A.name,我得到一个结果文档B,其关联性得分为say SCR1。现在,如果我以相反的方式进行查询,即我用B.name查询,然后我在结果的某个地方得到了文档A,但是这次B和A的分数是而不是相同的SCR1 我相信这是因为文件A.name和文件B.name中的术语数量不同,所以相似性分数不一样。这是造成这种差异的原因吗 无论哪种方式我都能得到相同的分数吗(如上所述)? 不可能比较任何
不可能比较任何两个查询的分数吗?
在原生Lucene API中可以做到这一点吗?要回答第二个问题,不能比较两个文档的分数 java用户lucene邮件列表中也发布了类似的问题 这里有一个链接:
这里给出了一个解释,解释了为什么不能这样做。我不太清楚您提到的问题,但假设情况是这样的:
- Doc A:Name=“卡洛斯·费尔南多·卢伊斯·玛丽亚·维克托·米格尔·拉斐尔·加布里埃尔·冈萨加·泽维尔·弗朗西斯科·德·布拉干萨,萨博尼亚波旁和萨克斯·哥达”
- 文件B:Name=“Tomás António Gonzaga”
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
有很多原因可以解释为什么这些会产生不同的分数。上面讨论的长度规范、协调因子(它可以提高匹配更多查询项的结果)很可能会发挥作用,tf(它会对匹配项更多的文档进行加权),idf(它更喜欢在整个索引中出现频率较低的项),等等
分数仅与查询运行的结果集相关。对查询或索引状态的更改可能会导致不同的分数,并且它们不具有可比性。您可以使用,来了解分数是如何计算的。“有很多原因可以解释为什么这些会产生相同的分数。”您的意思是为什么它们不会产生相同的分数?在您的示例queryA和queryB中,让我们假设对于queryA响应,我们得到带有分数SCR1的DocB,对于queryB响应,我们得到带有分数SCR1的DocA。这两个分数是一样的吗。看起来不会,但只是想澄清这个问题,你不会期望分数相等。即使在只有这两个文档的简单情况下,长度范数、坐标因子和queryNorm也会有所不同。
name:tomas name:antonio name:gonzaga