2011-11-27 70 views
1

我正在使用lucene.net生成索引并进行搜索。我实际上是通过Codeplex上的Examine项目间接使用API​​。我目前有一切正常工作和分页逻辑,但是当前逻辑页面搜索结果搜索完成后。我不喜欢这样做,因为这意味着搜索可能会返回数千条记录,只有这样我的代码才会获取所需的10-20条记录,并丢弃剩余的这些资源。即使每个SearchResult项目只是一个小小的3KB,执行这些搜索的内存量也会随着时间的推移而增长,并成为一个巨大的内存。我的共享主机只保证1GB的专用内存,所以这是我的网站的一大问题。lucene.net使用查询分页?

所以问题是:我如何使用lucene查询语言单独地以页面方式限制结果的结果?我看了一下lucene.net从中移植过来的apache lucene项目,而且我没有看到任何可以让我做我正在寻找的语法。基本上我想要相当于SQL服务器必须限制查询语言级别的行。

E.g. (这就是我们会怎么做分页在SQL并且只返回20条记录不是在where子句相匹配的所有记录)

选择*(选择ROW_NUMBER()OVER(ORDER BY订购日期)作为RoNum, 订单ID, 订购日期 FROM SalesOrders的 WHERE OrderCustomerName像“戴维斯%”)O WHERE ROWNUM 1到20之间

+0

[Lucene .NET结果子集]的可能重复(http://stackoverflow.com/questions/1242333/lucene-net-result-subsets) –

回答

1

我不认为有一个major waste of resources,因为搜索(使它简单)没有什么比计算更位向量&成绩。什么是昂贵的是从指数中读取文档。 (除了已弃用的Hits类别)搜索结果不会读取文档,而只是返回docid,因此跳过前N个结果没有太多开销。

这是一个例外,当你想根据某些字段排序结果。然后,必须从索引中读取搜索结果列表中的所有文档,以便能够以正确的顺序返回它们。

+0

我使用了内存分析器,每次搜索都看到大约20个字节项目返回。所以即使有10,000个结果的大量数据,其影响也不会超过兆字节。 – TugboatCaptain