Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个solr文档_Solr_Lucene_Solr4 - Fatal编程技术网

比较两个solr文档

比较两个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中的术语数量不同,所以相似性分数不一样。这是造成这种差异的原因吗 无论哪种方式我都能得到相同的分数吗(如上所述)? 不可能比较任何

我试图使用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”

如果搜索“gonzaga”,文档B将获得更高的分数,因为虽然每个名称中都有一个匹配项,但文档B的名称要短得多,只有三个术语,短字段的权重更大。这是中提到的长度规范

不过,还有其他因素。如果我们把每个名字都扔进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


有很多原因可以解释为什么这些会产生不同的分数。上面讨论的长度规范、协调因子(它可以提高匹配更多查询项的结果)很可能会发挥作用,tf(它会对匹配项更多的文档进行加权),idf(它更喜欢在整个索引中出现频率较低的项),等等


分数仅与查询运行的结果集相关。对查询或索引状态的更改可能会导致不同的分数,并且它们不具有可比性。您可以使用,来了解分数是如何计算的。

“有很多原因可以解释为什么这些会产生相同的分数。”您的意思是为什么它们不会产生相同的分数?在您的示例queryA和queryB中,让我们假设对于queryA响应,我们得到带有分数SCR1的DocB,对于queryB响应,我们得到带有分数SCR1的DocA。这两个分数是一样的吗。看起来不会,但只是想澄清这个问题,你不会期望分数相等。即使在只有这两个文档的简单情况下,长度范数、坐标因子和queryNorm也会有所不同。
name:tomas name:antonio name:gonzaga