电子商务搜索引擎http://demo.rivues.com:195中有一个功能是按照销售量排序,销售量的数据是实时统计的,检索的时候有一个功能是按照销售量来排序,这个功能用到了Solr的函数排序(Sort By Function,Solr 4.0的功能,Solr 4.0还有一个比较有用的功能是分组统计 group),自定义的函数代码如下:
public class SortSalesFunction extends SimpleFloatFunction {
public SortSalesFunction(ValueSource source) {
super(source);
}
protected String name() {
return "sales";
}
/**
*
*/
protected float func(int doc, DocValues vals) {
SalesData salesData = RivuDataContext.salesData.get(vals.strVal(doc)) ;
return salesData!=null ? salesData.getSales() : 0 ;
}
}
在 org.apache.solr.search.ValueSourceParser 中注册一下函数:
addParser("sales", new ValueSourceParser() {
public ValueSource parse(FunctionQParser fp) throws ParseException {
ValueSource a = fp.parseValueSource();
return new SortSalesFunction(a);
}
});
检索的时候加上检索排序条件 sr=sales(id)即可