0

我有一个类似 StackOverflow 的系统,其中内容被组织成线程,每个线程都有自己的内容(问题正文/文本)和帖子/回复。

我正在开发通过 Lucene 搜索此内容的能力,如果可能的话,我决定要为单个帖子编制索引(它使索引更容易更新,并且意味着我有更多的控制权和调整结果的能力),而不是索引整个线程。然而,我遇到的问题是我希望搜索显示线程列表,而不是帖子列表。

如何让 Lucene 只返回唯一线程作为结果,同时搜索帖子的内容?

4

3 回答 3

1

当您索引线程时,您应该将每个线程分解为帖子,并使每个帖子Document具有一个字段,该字段包含一个唯一 id 标识它所属的线程。

当您执行搜索时,我建议您使用 lucene 2.9 或更高版本,这使您可以使用Collector. 收集器允许您预处理检索到的文档,从而您可以将源自同一线程 ID 的帖子组合在一起。

于 2010-03-02T21:27:31.810 回答
1

每个文档都可以有一个“threadId”字段。运行搜索后,您可以遍历结果集并返回所有唯一的 threadId。

棘手的部分是指定要返回多少结果。如果您想在结果页面上显示 10 个结果,您可能需要 Lucene 返回 10 + m 个结果,因为一定百分比的返回集将被重复数据删除,因为它们属于相同的帖子线。如果重复数据集 < 10,您将需要合并一些额外的逻辑来运行另一个 Lucene 搜索。

这就是 Nutch 项目在折叠属于同一域的多个搜索结果时所做的事情。

于 2010-03-01T18:35:43.627 回答
0

仅出于完整性考虑,最新的 Lucene 版本(从 3.2 开始)支持对此类用例非常有用的分组 API:

http://lucene.apache.org/java/3_2_0/api/contrib-grouping/org/apache/lucene/search/grouping/package-summary.html

于 2011-10-23T18:47:54.333 回答