solr4.7.2自定义评分排序

概述

Solr提供ValueSourceParser来实现自定义评分函数,在自定义评分函数中封装评分逻辑,然后根据自定义评分函数计算的值进行排序。

准备数据

将数据导入solr

原始查询

q=sdes:共和国

fq=spopulation:[ 500000000 TO * ]

fl=*,score

排序默认使用score得分排序,可发现巴西的评分(0.15021087)比中国评分(0.1201687)高,那么可以利用自定义评分函数的值,来实现重新排序

自定义评分逻辑

//默认得分都是1.0分
float boot = 1.0f;

//如果sarea不存在或者为小,则减去0.2分
if (StringUtils.isBlank(sarea) || "小".equals(sarea)) {
   boot -= 0.2f;
}

//如果sname存在中,则增加0.2分
if (sname.contains("中")) {
   boot += 0.2f;
}

//如果spopulation大于500000000,则增加0.5分
if (spopulation > 500000000) {
   boot += 0.5f;
}

根据新的评分逻辑计算,巴西的评分(1.0),中国的评分(1.7)

编写代码

public class MyValueSourceParser extends ValueSourceParser {

    private final Logger log = LoggerFactory.getLogger(MyValueSourceParser.class);

    public MyValueSourceParser() {
        super();
    }

    @Override
    public ValueSource parse(FunctionQParser fp) throws SyntaxError {
        /**
         * 按顺序取2个参数
         */
        String arg1 = fp.parseArg(); //取到第一个参数
        String arg2 = fp.parseArg(); //取到第二个参数
        log.info("MyFilterQParserPlugin arg1=" + arg1);
        log.info("MyFilterQParserPlugin arg2=" + arg2);

        /**
         * 获取LocalParams
         */
        SolrParams solrParams = fp.getLocalParams();
        if (null != solrParams) {
            Iterator<String> it = solrParams.getParameterNamesIterator();
            while (it.hasNext()) {
                final String name = it.next();
                final String[] values = solrParams.getParams(name);
                for (String v : values) {
                    log.info("LocalParams name:" + v);
             
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值