2015-10-12 84 views
1

我剛升級到ES 2.0.0-rc1。 我使用本地節點進行JUnit測試。來自Java API的Elasticsearch 2.0 script_score

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從classpath

/加載插件可能是解決方案。不。

編輯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

我可以重新提出這個問題嗎?從1.x升級到2.1.0後,我遇到完全相同的問題。我有一個註冊了原生Java腳本的插件。我可以在日誌中看到插件確實調用了onModule(ScriptModule)方法並註冊了本地腳本的工廠。當我嘗試使用script_score腳本時,ES嘗試在「.scripts」索引中找到不存在的腳本。我指定的腳本是「lang」:「native」,「id」是正確的。任何想法正在發生什麼? – lukeforehand

+0

當我形成了POST,看起來像這樣(沒有 「身份證」),它的工作原理: { \t 「script_score」:{ \t \t 「腳本」: 「my_script」, 「郎」: 「原生」, \t \t「params」:{} \t} } – lukeforehand

回答

0

我不知道爲什麼,因爲它不遵循任何邏輯,但所有你需要做的是使用ScriptType.INLINE

Script script = new Script("myscript", ScriptType.INLINE, "native", params); 

我們不能使用索引,因爲elasticsearch將查找在索引腳本它的系統,並且由於我們的腳本沒有被索引,所以......這是行不通的。