lucene能够很方便的实现自定义排序
具体做法就是写一个类实现SortComparatorSource这个接口
在类里返回ScoreDocComparator
实现ScoreDocComparator 的三个方法compare,sortValue,sortType就行了
public class MyComparatorSource implements SortComparatorSource {
private static final long serialVersionUID = 1L;
// 返回ScoreDocComparator 用来实现排序功能
public ScoreDocComparator newComparator(IndexReader reader, String fieldname) throws IOException {
return new DistanceScoreDocLookupComparator();
}
private static class DistanceScoreDocLookupComparator implements ScoreDocComparator {
//这里写实现自己的排序比较方法
public int compare(ScoreDoc i, ScoreDoc j) {
if (i.score > j.score) return -1;
if (i.score < j.score) return 1;
return 0;
}
// 返回值
public Comparable sortValue(ScoreDoc i) {
return new Float(i.score);
}
//指定SortType
public int sortType() {
return SortField.FLOAT;
}
}
}
具体做法就是写一个类实现SortComparatorSource这个接口
在类里返回ScoreDocComparator
实现ScoreDocComparator 的三个方法compare,sortValue,sortType就行了
public class MyComparatorSource implements SortComparatorSource {
private static final long serialVersionUID = 1L;
// 返回ScoreDocComparator 用来实现排序功能
public ScoreDocComparator newComparator(IndexReader reader, String fieldname) throws IOException {
return new DistanceScoreDocLookupComparator();
}
private static class DistanceScoreDocLookupComparator implements ScoreDocComparator {
//这里写实现自己的排序比较方法
public int compare(ScoreDoc i, ScoreDoc j) {
if (i.score > j.score) return -1;
if (i.score < j.score) return 1;
return 0;
}
// 返回值
public Comparable sortValue(ScoreDoc i) {
return new Float(i.score);
}
//指定SortType
public int sortType() {
return SortField.FLOAT;
}
}
}