我的lucene 4.6的分页、排序代码是:
private ScoreDoc getLastScoreDoc(int pageNum,int pageRecord,Query query,IndexSearcher searcher,Sort sort) throws IOException {
if(pageNum==1)return null;//如果是第一页就返回空
int num = pageRecord*(pageNum-1);//获取上一页的最后数量
TopDocs tds = searcher.search(query, num,sort);
return tds.scoreDocs[num-1];
}
/**
* 标题查询匹配的分页数据
* @param query
* @param pageNum
* @param pageRecord
* @return Page 单页Page对象
*/
public Page singleSearchPageByAfter(String queryStr,int pageNum,int pageRecord) {
List<WenDu> pagelist=null;
Page page=null;
try {
Directory directory = FSDirectory.open(new File(indexdir));
IndexReader reader = IndexReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser(Version.LUCENE_46,

在使用Lucene 4.6进行分页排序时遇到异常:'java.lang.IllegalArgumentException: after must be a FieldDoc; got doc=411 score=1'。问题关键在于分页的上、下一页都需要传入相同的排序对象。解决办法是确保无论在搜索上一页还是下一页时,IndexSearcher的search()或searchAfter()方法都包含排序对象参数。

1万+

被折叠的 条评论
为什么被折叠?



