1

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

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

该链接(向下滑动一点并找到提到的长度)谈到在索引时访问该值。我希望能够在索引后这样做。该链接还讨论了将值保存为 doc 值,但它没有提供如何执行此操作的示例。

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

4

1 回答 1

1

文章中提到该统计数据是指FieldInvertState。一旦你有了它,如何获得你正在寻找的统计数据应该是相当简单的(只需调用getLengthgetUniquetermCount或任何你需要的东西)。

FieldInvertState 被传递给Similarity,尤其是调用Similarity.computeNorm。规范值是在索引时计算和存储的,而不是在查询时评估的,因此有效地使用它需要您重新索引。

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

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

你可以用你喜欢的任何东西覆盖它。

这将有助于根据自定义的基于长度的计算来调整得分。如果这不是您要查找的内容,而是需要能够仅获取该信息,那么我认为仅存储和字段,并从获取时返回的字段值中获取长度 aDocument将是最简单的实现。

于 2013-04-15T15:31:44.783 回答