递归地确定lucene中的相似性

时间:2014-12-01 13:16:50

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

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

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

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

一种简单的替代方法是为每个级别的分辨率创建单独的索引,即一个用于书籍,一个用于章节,一个用于子章节。但这似乎不够优雅,我不确定这是否会运作良好,考虑到我会在不同的指数中获得不同的逆文档频率值。这导致了一个次要问题:是否有办法使lucene仅将某些文档视为其tf-idf计算的参考类?

1 个答案:

答案 0 :(得分:0)

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

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

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