在查询评估期间获取文档长度apache lucene 5.3

时间:2016-01-07 13:40:58

标签: apache lucene

我正在尝试更改apache lucene 5.3中的得分,而对于我的公式,我需要文档长度(文档中的令牌数)。我从类似问题的答案中理解,你没有一个简单的方法来做到这一点。因为lucene没有把它保持在索引处。所以我想也许在索引时我会创建一个从docID到文档长度的Map,然后在查询评估中使用它。但是,我不知道我应该在哪里放置这张地图以及我将在哪里更新它。

1 个答案:

答案 0 :(得分:0)

你是完全正确的,在索引文档时存储它是最好的方法。存储它的地方是常态(不要与queryNorm混淆,这是不同的东西)。规范提供与字段一起存储的单个值,在查询时可用于评分。

Similarity实施中,这应该采用ComputeNorm方法,该方法通过FieldInvertState公开您需要的信息,尤其是FieldInvertState.getLength()。通过LeafReader.GetNormValues在搜索时提供规范。

如果您要延长TFIDFSimilarity,则只需要实施encodeNormValuedecodeNormValuelengthNorm方法。