Searchkick поиск на основе сохраненных пользователем рецептов - PullRequest
0 голосов
/ 03 октября 2019

Работая над некоторыми поисковыми запросами, используя searchkick, и не могу понять, как настроить поиск searchkick, чтобы получить нужные мне результаты. Таким образом, пользователи могут сохранять рецепты, а с рецептами связаны теги. Я хочу получить все теги из их сохраненных рецептов и искать рецепты с одинаковыми тегами и взвешивать теги в зависимости от того, сколько раз они появляются.

Таким образом, чтобы получить теги, я могу сделать это:

tags = Tagging.where(taggable_id: current_user.saved_recipes.pluck(:recipe_id)).group(:tag_id).count

Это возвращает что-то вроде этого:

{23=>1, 56=>1, 27=>2, 30=>1, 28=>1, 36=>1, 39=>1, 16=>1}

Я просто не уверен, как передать этот массив для взвешивания чисел, поэтому в этом случае тег 27 будет иметь больший вес, чем остальные. Поле, которое я ищу в моем индексе эластичного поиска, это: теги.

Recipe.search "*", where: [tags: tag]

Это то, о чем я думал, но хэш тегов имеет эти цифры и не уверен, как сделать так, чтобы это повысило результаты. Надеюсь, это ясно

1 Ответ

1 голос
/ 04 октября 2019

Вы можете попробовать использовать опцию boost_where, которая позволяет вам повысить результаты на другой коэффициент для разных значений.

В частности, в вашем случае вы можете попробовать:

tags = Tagging.where(taggable_id: current_user.saved_recipes.pluck(:recipe_id)).group(:tag_id).count

# Boost any tags with count greater than 1
boost_values = tags.select { |k, v| v > 1 }.map { |k,v| {value: k, factor: v * 10} }

Recipe.search "*", where: [tags: tag], boost_where: {tags: boost_values}
...