Używam elasticsearch (v2.0.0) do wyszukiwania w Railsach i chcę dodać do naszego niestandardowego skryptu do oceniania, ale albo zepsuję składnię, albo po prostu coś brakuje. w całości. Wszystko działa bez sprawdzania w skrypcie dla tablicy, więc to jedyna część, która nie działa.Elasticsearch groovy skrypt do sprawdzania parametrów w tablicy
Więc dla indeksu recipe_user_ids
jest tablicą liczb całkowitych:
indexes :recipe_user_ids, type: 'integer'
Następnie w zapytaniu określić parametr dla pliku skryptu i który plik skryptu:
functions: [{
script_score: {
params: { current_user_id: user.id },
script_file: 'ownership_script'
}
}]
a owner-script.groovy file:
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
Nie dostaję żadnych błędów, ale Rezultaty nie wydają się pasować do tego, czego oczekiwałbym, gdy tablica recipe_user_ids
zawierała current_user_id
, więc wszystko sprowadza się do instrukcji else. Czy jest to problem typu, składnia? Wszelkie wskazówki bardzo doceniane.
Jaka jest poprawna nazwa tego pola: 'recipes_user_ids' lub 'recipe_user_ids'? Masz tam oba imiona ... – Val
Niestety, to był literówka w poście, a nie kod! Edytowane. – Lev
Skąd pochodzi wartość 'user.id' w parametrach skryptu? Jaką wersję ES używasz? – Val