使用像LIMIT这样的sql的Lucene.NET结果? + 1k问题

时间:2010-09-21 20:09:24

标签: lucene lucene.net limit

我同意this answer并且喜欢它,但我真的宁愿在上线之前解决这个问题。所以我开始赏金,希望我的屁股不会被咬伤;)。


使用Lucene.NET 2.9.x 任何使用.NET的版本。我如何搜索和限制/分页结果类似于SQLite和MySql中的limit关键字?我想找到排名前20位的文档,其中包含“Apple”这个词,并且链接到第20页,返回20个结果,忽略前400个文档得分更高。我应该实现它this way(信用证转到下面的Pascal Dimassimo回答)


1k问题

嘿伙计们,我目前有999个问题,所以这将是我的第1000个问题!我只是想对所有回答我问题的人表示感谢,给我发表评论并总体帮助我学习编程和技术多年以后我会独自一人。

我还想提一下Edward Tanguay长期领导问题最多的问题,更重要的是要问很多赞成 的问题。我罢工让我的质量和他一样高。我也想提一下那些提出很多问题的人。 ooometal-gear-solidMasiBlankman

2 个答案:

答案 0 :(得分:3)

search method of the Searcher class有一个参数来限制查询返回的结果数。

Query query = parser.parse("Apple");
TopDocs topDocs = searcher.search(query, 20);

但Lucene并不支持分页。您将不得不重做您的查询并保持适合您所需范围的结果。

请参阅此question

答案 1 :(得分:1)

你在第二行使用的Searcher.search也有签名:

Search(Query query, Filter filter, HitCollector results)

使用HitCollector将临时结果刷新为快速和临时存储。例如,如果用户要求前20 - 你需要返回它,并在后台线程开始缓存所有另一个。实际上你只需要存储文档的ID,因此对于1百万个结果,预计大约需要4Mb。

当结果存储在存储中时,支持分页很简单。