简介
当通过指定的facets对文档进行统计后按指定的排序方式返回。
默认可指定的排序方式
Bobo Browse 的API中提供了2种默认的排序方式:
如下面根据颜色统计的例子:
根据值升序排序:
程序中的代码设置如下:
faceSpec.setOrderBy(FacetSortSpec.OrderValueAsc);
输出结果如下:
- blue (2)
- green (19)
- red (21)
- yellow (20)
根据结果数降序排序:
程序中的代码设置如下:
faceSpec.setOrderBy(FacetSortSpec.OrderHitsDesc);
输出结果如下:
- red (21)
- yellow (20)
- green (19)
- blue (2)
自定义排序
它可以通过继承API实现你特有的排序方式:
首先,实现ComparatorFactory 接口:
public interface ComparatorFactory{
Comparator<Integer> newComparator(FieldValueAccessor fieldValueAccessor,int[] counts);
Comparator<BrowseFacet> newComparator();
}
如下面的例子,自定义一个实现ComparatorFactory 接口的类按统计结果降序排序:
public class FacetHitcountComparatorFactory implements ComparatorFactory {
public Comparator<Integer> newComparator(FieldValueAccessor valueList,
final int[] counts) {
return new Comparator<Integer>(){
public int compare(Integer f1, Integer f2) {
int val = counts[f1] - counts[f2];
if (val==0){
val=f2-f1;
}
return val;
}
};
}
public Comparator<BrowseFacet> newComparator() {
return new Comparator<BrowseFacet>(){
public int compare(BrowseFacet f1, BrowseFacet f2) {
int val = f1.getHitCount() - f2.getHitCount();
if (val==0){
val=f1.getValue().compareTo(f2.getValue());
}
return val;
};
}
}
接着, 实例化这个类到FacetSpec中,排序order by指定枚举类型为OrderByCustom:
FacetHitcountComparatorFactory myComparatorFactory = new FacetHitcountComparatorFactory();
facetSpec.setOrderBy(FacetSortSpec.OrderByCustom);
facetSpec.setCustomComparatorFactory(myComparatorFactory);
注意,如果没有设置setCustomComparatorFactory,而排序类型设为OrderByCustom,则会抛出IllegalArgumentException 异常。