【问题标题】:Get term frequencies in Lucene在 Lucene 中获取词频
【发布时间】:2010-10-14 14:54:52
【问题描述】:

有没有一种快速简便的方法可以从 Lucene 索引中获取词频,而无需通过 TermVectorFrequencies 类来完成,因为对于大型集合来说这需要大量时间?

我的意思是,有没有像 TermEnum 这样的东西,它不仅有文档频率,还有词频?

更新: 使用 TermDocs 太慢了。

【问题讨论】:

    标签: java full-text-search lucene


    【解决方案1】:

    使用TermDocs 获取给定文档的词频。与文档频率一样,您可以使用感兴趣的术语从IndexReader 获取术语文档。


    您不会找到比TermDocs 更快的方法而不失一般性。 TermDocs 直接从索引段中的“.frq”文件读取,其中每个词频按文档顺序列出。

    如果这“太慢”,请确保您已优化索引以将多个段合并为一个段。按顺序遍历文档(跳过没问题,但不能高效地在文档列表中来回跳转)。

    您的下一步可能是进行额外处理,以创建一个更专业的文件结构,从而省略SkipData。就我个人而言,我会寻找一种更好的算法来实现我的目标,或者提供更好的硬件——大量内存,或者保存RAMDirectory,或者提供给操作系统以在其自己的文件缓存系统上使用。

    【讨论】:

      【解决方案2】:

      Lucene 的主干版本(最终将是 4.0)现在公开了来自 TermsEnum 的每个术语的 totalTermFreq()。这是该词在所有内容中出现的总次数(但与 docFreq 一样,不考虑删除)。

      【讨论】:

      • 使用lucene 4.0,相当于td.read(doc, freq),其中td是TermDoc,doc和freq是int[]?
      【解决方案3】:

      TermDocs 给出包含该术语的每个文档中给定术语的 TF。您可以通过遍历每个 对并计算对数来获得 DF,尽管 TermEnums 应该更快。 IndexReader 有一个 termDocs(Term) method,它返回给定 Term 和索引的 TermDocs。

      【讨论】:

      • 这种方法可以用来确定词频是否是 Lucene 查询的结果集?
      • 是否可以使用 termDocs 来获取 PhraseFrequency ?
      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多