java - 如何计算lucene索引中每个文档的词条数?

标签 java lucene

我想知道 lucene 索引中每个文档的术语数。我一直在 API 和互联网上搜索,但没有结果。你能帮帮我吗?

最佳答案

Lucene 旨在回答相反的问题,即哪些文档包含给定术语。因此,为了获得文档的术语数量,您必须进行一些修改。

第一种方法是为每个字段存储术语 vector ,以便您能够检索术语的数量。术语 vector 是字段的术语列表。在搜索时,您可以使用 getTermFreqVector 检索它。 IndexReader 的方法(如果它们是在索引时存储的)。当你拥有它时,你会得到 vector 的长度,并且你会得到该字段的术语数。

如果您存储了文档的字段,另一种方法是取回这些字段的文本并通过分析来计算术语的数量(将文本拆分为单词)。

最后,如果一个字段的项数的近似值对您来说足够了,并且您在索引时存储了范数,则可以选择计算用于计算字段范数的反函数。如果您仔细查看方法lengthNorm在 Similarity 类中,您会注意到它使用字段的术语数。此方法的结果使用 encodeNorm 存储在索引中。方法。您可以让他们在搜索时使用 norms 检索规范。 IndexReader 的方法。有了范数,使用 lengthNorm 中使用的数学函数的逆数学函数来取回项数。就像我说的,这只是一个近似值,因为当存储标准时,会丢失一些精度,并且您可能不会得到与存储的完全相同的数字。

关于java - 如何计算lucene索引中每个文档的词条数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3574106/

相关文章:

elasticsearch - 为什么我在Elastic search中看到已删除的文档

solr - 了解 Lucene 领先的通配符性能

mysql - 在 Lucene 中搜索确切的短语

c# - Lucene .NET 搜索结果

lucene - 使用 "and"运算符搜索多个字段(但使用字段自己的分析器)

JavaFX TableView 列宽更改事件监听器

java - 有Java的几何库吗? (不是 JTS)

java - 在Java中打印直方图

java - 这段 Java Puzzlers 代码有什么问题?

java - 为什么重写在 JAVA 中的工作方式与 C++ 有所不同?