2015-06-11 51 views
4

總是0我有這種Groovy腳本的:Elasticsearch:_score在Groovy腳本

def multiplier = doc['data'].value 
if (multiplier <= 0) { 
    multiplier = 1 
} 
multiplier * _score 

我用它作爲script_score,我的成績是0好像_score始終爲0。隨着小米腳本,它的作品。

MVEL腳本是:

_score * doc['data'].value 

查詢(只針對MVEL版本lang變化):

"function_score": { 
    query: { 
     "bool": { 
      "should": [ 
       // many matches... 
      ], 
      "minimum_should_match": 1, 
     }, 
    }, 
    "script_score": { 
     "lang": "groovy", 
     "file": "my_script", 
    }, 
    "boost": 2.5, 
    "score_mode": "max", 
} 

難道我做錯了什麼? 我在Elasticsearch 1.5.2上測試了這個。

+0

你從哪兒弄來的'_score'variable – bmscomp

+0

@bmscomp ES提供了它,它在本文檔中有描述https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html – Jazz

+0

你能分享mvel和groovy嗎? ES查詢版本? –

回答

3

我沒有這個一個很好的解釋,但此查詢在Groovy對我的作品(不得不啓用日誌記錄在腳本中看到_score是含有什麼):

multiplier * _score.score() 
+0

它的工作原理,謝謝! – Jazz

+0

@Andrei Stefan,你釘了它。我一直在爲此奮戰數月,而我的得分總是迴歸爲零。我的腳本是這樣的「_score *(一些其他公式)」。我更改爲「_score.score()*(一些其他公式),它的工作。謝謝。 – Thiago

+0

Btw,@Andrei Stefan,你如何啓用腳本中的登錄? – Thiago