编程点滴.LUCENE执行检索和分页
争取每天记录一点
在Lucene早期的版本中是使用Hits存检索结果的.在我的项目中也是先用的这个.但是效率真的不高.它一次将所有的数据都提取出来处理,所以很慢.
现在我们用TopDocs来代替Hits.
TopDocs常用调用方法如下
方法 | 说明 |
TopDocs Search(Query query, int n) | 条件和取前n条数据 |
TopDocs Search(Query query, Filter filter, int n) | 使用过滤器的检索 |
TopFieldDocs Search(Query query, Filter filter, int n, Sort sort) | 排序的检索结果 |
TopDocs三个重要属性和方法
totalHits 总共命中的个数
scoreDocs 匹配文档的集合包含了DocId和Score 一般通过DocId取文档
getMaxScore() 返回最匹配的文档得分.
TopDocs检索结果分页
第一种方法:类似使用Hits,一次将所有的DocId都取出来后再排序.通常将这个结果放到缓存中,适用于对检索结果频繁翻页的情况.
第二种方法:每次都是新搜索,n的数值随着翻页不断增加.大部分都会选择这种方式,尤其是数据量大,检索时间长,命中普遍低的情况.
LUCENE.NET QQ交流群(81361051)