在Lucene 4中查找文档/字段长度

时间:2013-04-15 13:50:29

标签: apache lucene

我希望能够在索引后访问文档特定字段的长度(以术语表示)。最好是,如果有一种方法没有重新索引,我想这样做。但是,如果以某种方式重新编制索引可以轻松访问此值,那么这也是有用的。

http://blog.mikemccandless.com/2012/03/new-index-statistics-in-lucene-40.html

该链接(scoll down,并找到提及 length )谈到在索引时访问该值。我希望能够在索引后进行此操作。该链接还讨论了如何将值保存到doc值,但它没有提供如何执行此操作的示例。

如果有人可以提供保存文档长度的示例,或者在索引后访问它,那将非常有用。感谢。

1 个答案:

答案 0 :(得分:1)

文章中提到的统计数据是指FieldInvertState。完成后,如何获取您要查找的统计信息应该非常简单(只需拨打getLengthgetUniquetermCount或您需要的任何内容。

FieldInvertState传递到Similarity,特别是传递给Similarity.computeNorm。标准值在索引时计算并存储,而不是在查询时进行评估,因此有效使用它需要重新索引。

使用此功能的典型方法是创建自定义Similarity,可能会扩展DefaultSimilarity。简单地覆盖lengthNorm DefaultSimilarity方法将是最简单的方法。它的标准实现是:

return (float)(1.0 / Math.sqrt(numTerms));

你可以用你喜欢的任何方式覆盖。

这可以根据基于长度的自定义计算来调整评分。如果那不是你想要的,而是需要能够只获取那些信息,我会认为只是存储和字段,并从你获取Document时返回的字段值获得长度将是最简单的实现。