理解 Solr Doc=

Understanding Solr Doc=

我有两个索引文档,我试图找出一个比另一个更高的相关性。所以我 运行 DebugQuery=True 为了得到解释。以下是两份文件的相关差异。

两种不同类型的文件

可能相关;这些文件有两种不同的类型,我使用 *_s 字段来区分。所以我的字段 module_s 有两个模块 1 和 2。我的查询有:

<arr name="filter_queries">
    <str>moduleid_s:(1 OR 2)</str>
</arr>

所以我认为这不会引起问题,但我想添加此信息。

相关解释差异:

文档 1 - 模块类型 = 1

result of: 1.7325882 = score(doc=3513280,freq=1.0), 
    product of: 0.44456035 = queryWeight, 
    product of: 0.5 = boost 7.7946143 = idf(docFreq=5286,maxDocs=4721423) 0.1140686 = queryNorm 3.8973072 = fieldWeight in 3513280, 
    product of: 1.0 = tf(freq=1.0), with freq of: 1.0 = termFreq=1.0 7.7946143 = idf(docFreq=5286, maxDocs=4721423) 0.5 = fieldNorm(doc=3513280) 

文档 2 - 模块类型 = 2

result of: 0.75800735 = score(doc=174,freq=1.0), 
        product of: 0.44456035 = queryWeight, 
        product of: 0.5 = boost 7.7946143 = idf(docFreq=5286,maxDocs=4721423) 0.1140686 = queryNorm 1.7050719 = fieldWeight in 174, 
        product of: 1.0 = tf(freq=1.0), with freq of: 1.0 = termFreq=1.0 7.7946143 = idf(docFreq=5286, maxDocs=4721423) 0.21875 = fieldNorm(doc=174) 

概要和问题

如您所见,解释几乎相同。它们都具有相同的 queryWeight、boost、idf 和 queryNorm。不同的是 doc=XXX。对于文档 1,它是 351328,对于文档 2,它是 174。谁能解释一下这个数字是多少?它来自哪里?为什么不同?

已用资源

那个号码就是docid。它唯一标识要从索引中检索的文档。跟得分完全没有关系。

真正的得分差异在于fieldnorm:

  • 文档 1:0.5 = fieldNorm
  • 文档 2:0.21875 = fieldNorm

fieldNorm是根据两个数字计算出来的。文档被索引时给予字段的提升,以及字段的长度(更精确的描述可以在 TFIDFSimilarity docs 中的 norm(t,d) 部分找到)

因此,该字段在文档 1 中 较短,或者在索引时在文档 1 中被赋予 更高的提升 .