我在Rails中使用elasticsearch(v2.0.0)進行搜索,並希望添加到我們的自定義腳本中進行評分,但我要麼搞亂了語法,其他完全。這一切都沒有在數組的腳本中檢查,所以這是唯一不起作用的部分。Elasticsearch groovy腳本來檢查參數包含在數組中
所以對於指數,recipe_user_ids
是一個整數數組:
indexes :recipe_user_ids, type: 'integer'
然後在搜索查詢我指定的腳本文件和腳本文件中的參數:
functions: [{
script_score: {
params: { current_user_id: user.id },
script_file: 'ownership_script'
}
}]
而所有權script.groovy文件:
if (current_user_id == doc['user_id'].value) { owner_modifier = 1.0 } else { owner_modifier = 0.0 }
if (doc['recipe_user_ids'].values.contains(current_user_id)) { recipe_user_modifier = 50.0 } else { recipe_user_modifier = 0.0 }
(_score + (doc['score_for_sort'].value + owner_modifier + recipe_user_modifier)*5)/_score
我沒有得到任何錯誤,但th當recipe_user_ids
數組包含current_user_id
時,e結果似乎不符合我的預期,因此所有內容都落入else語句中。它是一個類型問題,語法?任何提示不勝感激。
什麼是該字段的正確名稱:'recipes_user_ids'或'recipe_user_ids'?你有兩個名字在那裏... – Val
對不起,這是一個錯誤的帖子,而不是代碼!編輯。 – Lev
'user.id'值來自您的腳本參數?你在運行什麼版本的ES? – Val