我有一个类似 StackOverflow 的系统,其中内容被组织成线程,每个线程都有自己的内容(问题正文/文本)和帖子/回复。
我正在开发通过 Lucene 搜索此内容的能力,如果可能的话,我决定要为单个帖子编制索引(它使索引更容易更新,并且意味着我有更多的控制权和调整结果的能力),而不是索引整个线程。然而,我遇到的问题是我希望搜索显示线程列表,而不是帖子列表。
如何让 Lucene 只返回唯一线程作为结果,同时搜索帖子的内容?
我有一个类似 StackOverflow 的系统,其中内容被组织成线程,每个线程都有自己的内容(问题正文/文本)和帖子/回复。
我正在开发通过 Lucene 搜索此内容的能力,如果可能的话,我决定要为单个帖子编制索引(它使索引更容易更新,并且意味着我有更多的控制权和调整结果的能力),而不是索引整个线程。然而,我遇到的问题是我希望搜索显示线程列表,而不是帖子列表。
如何让 Lucene 只返回唯一线程作为结果,同时搜索帖子的内容?
每个文档都可以有一个“threadId”字段。运行搜索后,您可以遍历结果集并返回所有唯一的 threadId。
棘手的部分是指定要返回多少结果。如果您想在结果页面上显示 10 个结果,您可能需要 Lucene 返回 10 + m 个结果,因为一定百分比的返回集将被重复数据删除,因为它们属于相同的帖子线。如果重复数据集 < 10,您将需要合并一些额外的逻辑来运行另一个 Lucene 搜索。
这就是 Nutch 项目在折叠属于同一域的多个搜索结果时所做的事情。
仅出于完整性考虑,最新的 Lucene 版本(从 3.2 开始)支持对此类用例非常有用的分组 API: