求更好的lucene分页方法?

路人甲Java 发布于 2013/04/21 22:31
阅读 600
收藏 1
我在使用lucene的时候,需要分页,在网上也找了不少,都是最大的条数中截取一部分,如果数据量大的时候会导致内存溢出,请问各位在使用lucene的时候是如何分页的?
加载中
0
平安北京
应该不会吧,排序后得到Hits,然后取指定索引的doc就行了啊
路人甲Java
路人甲Java
哥们,你看我下面跟帖的代码。有何高见?
0
路人甲Java
路人甲Java

目前代码如下:

public static class PageCollecor extends Collector {



private List<Integer> docList = new ArrayList<Integer>();
private int pageSize;
private int pageNum;


public PageCollecor(int pageSize, int pageNum) {
super();
this.pageSize = pageSize;
this.pageNum = pageNum;
}


int count = 0;


public List<Integer> getDocList() {
return docList;
}


public void setDocList(List<Integer> docList) {
this.docList = docList;
}


public int getPageSize() {
return pageSize;
}


public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}


public int getPageNum() {
return pageNum;
}


public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}


@Override
public void setScorer(Scorer scorer) throws IOException {


}


@Override
public void collect(int doc) throws IOException {
count++;
if (count > ((pageNum - 1) * pageSize)
&& count <= pageSize * pageNum) {
docList.add(doc);
}
}


@Override
public void setNextReader(IndexReader reader, int docBase)
throws IOException {
}


@Override
public boolean acceptsDocsOutOfOrder() {
return false;
}


}

如果分页的时候使用Collector,搜索的结果又100万条,那么,那么collect方法会被调用100万次,但是我只需要取100到200之间的数据,如何能防止该方法只调用200次呢?

0
戴威
戴威
看了你写的所有代码,我都没见着调用lucene的分页。
0
平安北京

引用来自“喵了个咪”的答案

看了你写的所有代码,我都没见着调用lucene的分页。
你按照我说的做就行了,先得到Hits,然后取Docment
平安北京
回复 @小白forever : 怎么不行,内存溢出?如果数据量非常大你就得增加jvm的heap大小了
路人甲Java
路人甲Java
哥们,你说的这个源码我看了的,不行的
平安北京
回复 @小白forever : 不好意思,我说的是2.3里面的,3.X的应该是searcher直接调用doc方法获取到Docment对象,doc(int docID)和doc(int docID, FieldSelector fieldSelector),这两个方法
路人甲Java
路人甲Java
hits是那个版本中的? 我用的是3.0.2的,没有看到hits,求解
返回顶部
顶部