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'
}
}]
そして、 ownership-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
エラーは発生しません。 recipe_user_ids
配列にcurrent_user_id
が含まれていると予想される結果と一致しないように見えるので、すべてがelse文に該当します。それは型問題、構文ですか?任意のヒントを大いに感謝します。
を使用するには、そのフィールドの正しい名前は何ですか: 'recipes_user_ids'または'recipe_user_ids'?あなたはそこに両方の名前を持っています... – Val
申し訳ありません、それは、コードではなく、投稿のタイプミスでした!編集されました。 – Lev
'user.id'の値はスクリプトのパラメータのどこから来ますか?そして、どのESのバージョンを実行していますか? – Val