我希望能够在索引后访问文档特定字段的长度(以术语表示)。最好是,如果有一种方法没有重新索引,我想这样做。但是,如果以某种方式重新编制索引可以轻松访问此值,那么这也是有用的。
http://blog.mikemccandless.com/2012/03/new-index-statistics-in-lucene-40.html
该链接(scoll down,并找到提及 length )谈到在索引时访问该值。我希望能够在索引后进行此操作。该链接还讨论了如何将值保存到doc值,但它没有提供如何执行此操作的示例。
如果有人可以提供保存文档长度的示例,或者在索引后访问它,那将非常有用。感谢。
答案 0 :(得分:1)
文章中提到的统计数据是指FieldInvertState。完成后,如何获取您要查找的统计信息应该非常简单(只需拨打getLength
,getUniquetermCount
或您需要的任何内容。
FieldInvertState传递到Similarity
,特别是传递给Similarity.computeNorm
。标准值在索引时计算并存储,而不是在查询时进行评估,因此有效使用它需要重新索引。
使用此功能的典型方法是创建自定义Similarity
,可能会扩展DefaultSimilarity
。简单地覆盖lengthNorm
DefaultSimilarity
方法将是最简单的方法。它的标准实现是:
return (float)(1.0 / Math.sqrt(numTerms));
你可以用你喜欢的任何方式覆盖。
这可以根据基于长度的自定义计算来调整评分。如果那不是你想要的,而是需要能够只获取那些信息,我会认为只是存储和字段,并从你获取Document
时返回的字段值获得长度将是最简单的实现。