我有一个类似StackOverflow的系统,其中内容被组织成线程,每个线程都有自己的内容(问题正文/文本),以及帖子/回复。
我正在通过Lucene生成搜索此内容的功能,如果可能的话,我已经决定将各个帖子编入索引,(它使索引更容易更新,并且意味着我有更多的控制和能力来调整结果),而不是索引整个线程。然而,问题是我希望搜索显示一个线程列表,而不是一个帖子列表。
我怎样才能让Lucene只返回唯一的线程作为结果,同时还搜索帖子的内容?
答案 0 :(得分:1)
每个文档都可以有一个“threadId”字段。运行搜索后,您可以遍历结果集并返回所有唯一的threadId。
棘手的部分是指定要返回的结果数量。如果你想在你的结果页面上显示10个结果,你可能需要Lucene返回10 + m的结果,因为返回集的一定百分比将被删除,因为它们是属于同一个的帖子线。你需要加入一些额外的逻辑来运行另一个Lucene搜索,如果重复数据集是< 10。
这是Nutch项目在折叠属于同一域的多个搜索结果时所做的事情。
答案 1 :(得分:1)
当您为线程编制索引时,您应该将每个帖子分成帖子,并使每个帖子都为Document
,其中包含一个字段,该字段包含标识其所属线程的唯一ID。
当您执行搜索实施时,我建议使用lucene 2.9或更高版本,这使您可以使用Collector
。收集器允许您预处理检索到的文档,从而您可以将来自同一线程ID的帖子组合在一起。
答案 2 :(得分:0)
只是为了完整,最新的Lucene版本(从3.2开始)支持对这种用例非常有用的分组API: