使用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]
这就是我的想法,但是标签的哈希值包含这些数字,并且不确定如何提高结果。希望这很清楚
答案 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}