C# Lucene.net搜索:返回具有唯一字段值的结果

C# Lucene.net搜索:返回具有唯一字段值的结果,c#,lucene.net,C#,Lucene.net,我正在编写一个基本的Lucene.Net应用程序来索引本质上是论坛帖子的内容。为了简化,每个Post文档都有一个URL和一些内容。对于每个给定的线程,我将每个Post作为一个单独的文档进行索引(将整个线程作为单个文档进行索引会在搜索时返回太多误报) 我遇到的问题是处理多个Post文档,这些文档在我的结果集中具有相同的URL。当我搜索并返回10个结果时,我希望每个结果引用不同的URL 目前,我有以下几点: // setup StandardAnalyzer analyzer = new Stand

我正在编写一个基本的Lucene.Net应用程序来索引本质上是论坛帖子的内容。为了简化,每个
Post
文档都有一个
URL
和一些
内容
。对于每个给定的线程,我将每个
Post
作为一个单独的文档进行索引(将整个线程作为单个文档进行索引会在搜索时返回太多误报)

我遇到的问题是处理多个
Post
文档,这些文档在我的结果集中具有相同的
URL
。当我搜索并返回10个结果时,我希望每个结果引用不同的
URL

目前,我有以下几点:

// setup
StandardAnalyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
FSDirectory directory = FSDirectory.Open(indexLocation);
IndexSearcher searcher = new IndexSearcher(directory);
parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "body", analyzer);

// search
Query query = parser.Parse(queryString);
TopDocs topDocs = searcher.Search(query, null, 10);
但是,在返回的十个结果中,可能只有7个唯一的
URL
。在再次搜索之前,我考虑过丢弃这些重复项,返回更大的结果集,并丢弃前10个(类似于分页),直到我有10个唯一的
URL
,但这会引发一些问题,例如,由于没有更多结果,我应该何时停止?等等


感觉应该在
TopDocs TopDocs=searcher.Search()点有一种过滤方法,以返回10个具有唯一
URL的结果。我找不到这方面的任何东西(也许我没有使用正确的术语),但我确信很多其他应用程序以前一定已经解决了这个问题。。。像这样的东西已经存在了吗,或者有人能提供一些关于如何实现这一点的建议吗?

你可以编写自己的HitCollector。你似乎希望每个结果代表不同的论坛线程,然后基本上你的结果会生成URL,而不是帖子。正如@L.B所指出的,您可以使用子类
HitCollector
来实现这一点,也许可以使用helper
HashSet
对象来强制唯一性。您好,Matthew,我们的团队在这方面也遇到了问题。。你找到解决这个问题的方法了吗?不幸的是没有!