基于用户保存的配方的Searchkick搜索

时间:2019-10-03 04:26:49

标签: ruby-on-rails elasticsearch searchkick

使用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的权重将高于其余数字。我在Elasticsearch索引中针对的字段是:tags。

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

这就是我的想法,但是标签的哈希值包含这些数字,并且不确定如何提高结果。希望这很清楚

1 个答案:

答案 0 :(得分:1)

您可以尝试使用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}