我刚刚升级到ES 2.0.0-rc1。 我使用本地节点进行JUnit测试。
Settings settings = Settings.builder()
.put("script.inline", "on")
.put("script.indexed", "on")
.put("path.home", "/").build();
return NodeBuilder.nodeBuilder()
.settings(settings)
.local(true)
.clusterName("c").node();
我的问题是升级版本没有看到我的原生脚本。
查询看起来像这样:
Script script = new Script("myscript", ScriptType.INDEXED, "native", params);
ScoreFunctionBuilder scoreBuilder = ScoreFunctionBuilders.scriptFunction(script);
输出如下:
...
"functions" : [ {
"script_score" : {
"script" : {
"id" : "myscript",
"lang" : "native",
"params" : {
"searchMode" : "A"
}
}
}
...
此脚本插件位于Maven依赖列表中。
它与之前的版本配合得很好但是在这个新版本中我得到以下例外:
Caused by: org.elasticsearch.index.query.QueryParsingException: script_score the script could not be loaded
Caused by: org.elasticsearch.index.IndexNotFoundException: no such index
那么如何将插件安装到本地节点?
修改1:
https://www.elastic.co/guide/en/elasticsearch/plugins/2.0/plugin-authors.html /从类路径加载插件
可能是解决方案。不。
编辑2:
似乎ScoreFunctionBuilder已被更改。
1.7:
ScoreFunctionBuilder scoreBuilder = ScoreFunctionBuilders.scriptFunction("myscript", "native", params);
2.0:
Script script = new Script("myscript", ScriptType.INDEXED, "native", params);
ScoreFunctionBuilder scoreBuilder = ScoreFunctionBuilders.scriptFunction(script);
但这并不适合本机脚本。
答案 0 :(得分:0)
我不知道为什么因为它没有遵循任何逻辑,但您需要做的就是使用ScriptType.INLINE
Script script = new Script("myscript", ScriptType.INLINE, "native", params);
我们无法使用INDEXED,因为elasticsearch会在其系统中查找索引脚本,因为我们的脚本没有按照索引进行索引......它不会起作用。