首页 新闻 会员 周边 捐助

基于Elasticsearch的自定义评分算法扩展 查询报错求大神指点

0
悬赏园豆:30 [待解决问题]

我的写的类分别是:

public class ScriptFactory implements NativeScriptFactory {
    public ExecutableScript newScript(@Nullable Map<String, Object> params) {
        return new Script(params);
    }

    public boolean needsScores() {
        return true;
    }

    public String getName() {
        // TODO Auto-generated method stub
        return null;
    }

}
public class Script extends AbstractDoubleSearchScript {
    private String[] paramArray;

    public Script(@Nullable Map<String, Object> params) {
        if (params == null || params.size() == 0) {
            return;
        }
        Set<String> keys = params.keySet();
        Iterator<String> iterator = keys.iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            String val = params.get(key).toString();
            System.out.println("key:" + key + ", val:" + val + "\r\n");
        }
        if (params.get("fields") == null) {
            return;
        }
        paramArray = params.get("fields").toString().split(",");
        System.out.println("fields:" + params.get("fields").toString());
    }

    public double runAsDouble() {
        double defaultReturnVal = Double.parseDouble(String
                .valueOf(((ScriptDocValues.Longs) doc().get("id")).getValue()));
        if (paramArray == null || paramArray.length == 0) {
            return defaultReturnVal;
        }
        return defaultReturnVal * (new Random().nextDouble());
    }

}
然后打包后放到了elasticsearch的lib目录下,修改了elasticsearch的配置文件
添加了一行这个代码:

script.native:
    mynativescript.type: es.testscript.ScriptFactory
然后查询报错,查询语句如下:
curl -XGET 'http://hadoop02:9200/example/doc/_search?pretty' -d '{
   "query": {
     "match_all": {}
   },
   "sort": {
     "_script": {
       "script": "mynativescript",
       "lang": "native",
       "order": "asc",
       "type": "string",
       "params": {
         "p1": 1,
         "p2": 2,
         "p3": 3
       }
     }
   }
 }'
报错信息如下:
{
  "error" : {
    "root_cause" : [
      {
        "type" : "parsing_exception",
        "reason" : "[_script] failed to parse field [lang]",
        "line" : 8,
        "col" : 15
      }
    ],
    "type" : "parsing_exception",
    "reason" : "[_script] failed to parse field [lang]",
    "line" : 8,
    "col" : 15
  },
  "status" : 400
}
求大神们指点指点
cmwx的主页 cmwx | 初学一级 | 园豆:172
提问于:2018-01-11 10:04
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册