我正在使用lucene.net来生成索引并进行搜索。我实际上通过codeplex上的Examine项目间接使用API。我现在已经完成所有工作并且调试逻辑就位,但是当前逻辑会在搜索完成之后将结果分页。我不喜欢这个,因为这意味着搜索可能会返回数千条记录,然后我的代码才会获取所需的10-20条记录,并丢弃其余的资源浪费。即使每个SearchResult项目只有3KB,执行这些搜索的内存量也会随着时间的推移而增长,并成为一个巨大的内存耗尽。我的共享主机只保证1GB的专用内存,所以这是我网站的一个大问题。
所以问题是:如何仅使用lucene查询语言以分页方式限制结果的结果?我查看了apuce lucene项目,lucene.net是从中移植的,我没有看到任何语法可以让我做我正在寻找的东西。基本上我想要相当于sql server在查询语言级别限制行的内容。
E.g。 (这就是我们如何在sql中进行分页,它只返回20条记录而不是每条匹配where子句的记录)
选择* from(选择Row_Number()OVER(ORDER BY OrderDate)为RoNum, 订单ID, 订购日期 来自SalesOrders WHERE OrderCustomerName喜欢'Davis%')O RowNum在1和20之间的位置
答案 0 :(得分:1)
我不认为有major waste of resources
,因为搜索(简单)只不过是计算Bitvector&分数。成本高昂的是从索引中读取文档。 (除了已弃用的Hits
类)搜索结果不会读取文档,而只返回docid,因此跳过前N个结果的开销不会很大。
例外情况是您希望根据某个字段对结果进行排序。然后必须从索引中读取搜索结果列表中的所有文档,以便能够以正确的顺序返回它们。