我正在尝试更改apache lucene 5.3中的得分,而对于我的公式,我需要文档长度(文档中的令牌数)。我从类似问题的答案中理解,你没有一个简单的方法来做到这一点。因为lucene没有把它保持在索引处。所以我想也许在索引时我会创建一个从docID到文档长度的Map,然后在查询评估中使用它。但是,我不知道我应该在哪里放置这张地图以及我将在哪里更新它。
答案 0 :(得分:0)
你是完全正确的,在索引文档时存储它是最好的方法。存储它的地方是常态(不要与queryNorm混淆,这是不同的东西)。规范提供与字段一起存储的单个值,在查询时可用于评分。
在Similarity
实施中,这应该采用ComputeNorm
方法,该方法通过FieldInvertState
公开您需要的信息,尤其是FieldInvertState.getLength()
。通过LeafReader.GetNormValues
在搜索时提供规范。
如果您要延长TFIDFSimilarity
,则只需要实施encodeNormValue
,decodeNormValue
和lengthNorm
方法。