【问题标题】:recursively determine similarity in lucene递归确定lucene中的相似性
【发布时间】:2015-01-29 12:17:33
【问题描述】:

我收藏了多种语言的书籍。我需要根据它们的相似性将每本书的各个部分相互链接。我需要将书籍链接到类似的书籍,将章节链接到类似的章节,将子章节链接到类似的子章节。

最好,相似度度量还考虑下一个最高级别的相似度,所以当我想比较两章时,它会首先检查章节所属的书籍彼此之间的相似度,并将其用作一个基线。我想这部分我必须手动实现,但我想知道如何有效地进行分层链接。

有没有办法告诉 lucene 索引中的文档遵循层次结构,其中书籍由章节组成,章节由子章节组成(哪些是要存储的实际文档)?如果是这样,书籍和章节可以在运行时通过组合它们组成的文档来构建。 lucene 有办法做到这一点吗?

一种简单的替代方法是为每个分辨率级别创建单独的索引,即一个用于书籍,一个用于章节,一个用于子章节。但这似乎不优雅,考虑到我会在不同的索引中获得不同的逆文档频率值,我不确定这是否会奏效。这就引出了第二个问题:有没有办法让 lucene 只考虑某些文档作为其 tf-idf 计算的参考类?

【问题讨论】:

    标签: java lucene similarity recursive-query tf-idf


    【解决方案1】:

    如果级别数是预先确定的,那么您可以使用分组功能http://lucene.apache.org/core/4_9_0/grouping/org/apache/lucene/search/grouping/package-summary.html

    我不知道它是否适用于多值字段,如果是,那么它也可以处理多个级别的分组(层次结构相似性)。您当然可以为不同的级别使用不同的字段。

    我还体验过另一种方法 - 在快速 NoSQL 数据库中对文档 ID 进行分组,当 lucene 返回文档时,您可以在 NoSQL 中搜索类似文档的 ID,然后再返回 lucene。但是,这种方法可能会导致其他问题(即总点击数,因为 lucene 即使不返回结果也会返回总点击数,但分组很可能会改变这个数字。

    【讨论】:

      猜你喜欢
      • 2011-10-05
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 2017-12-14
      • 1970-01-01
      • 2016-02-01
      • 2011-08-17
      相关资源
      最近更新 更多