您的位置:首页 > 其它

分组统计后如何按指定的方式排序返回

2010-07-17 23:50 232 查看

简介

当通过指定的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 异常。

引用原文:http://snaprojects.jira.com/wiki/display/BOBO/Facet+Sorting
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐