0

我正在对资源执行太阳黑子 (solr) 搜索,并按我当前用户最喜欢的资源过滤结果。使用下面的代码可以完美地工作,但是它要求我对结果进行排序并在用户收藏该项目时显示(也就是在收藏夹模型上创建的日期)。我不知道如何将其集成到我的搜索中,同时保持特定于用户的日期。任何想法或解决方案将不胜感激。

class Resource < ActiveRecord::Base
  has_many :favorites
  has_many :favorite_users, through: :favorites

  searchable do
    text :title
    ...
    integer :favorite_user_ids, references: User, multiple: true
  end

  def self.full_search(params={}, current_user)
    search = Resource.search do
      keywords params[:term]
      with(:favorite_user_ids, current_user.id) if params[:filter] == 'favorite'
    end
    search
  end
end
4

1 回答 1

0

啊,我看到了问题——您需要按created_atJOINED 模型的日期排序,而不是您要索引的模型之一。

如果您将太阳黑子索引移动到收藏模型而不是资源会怎样?这将导致资源标题被多次索引,但是......

像这样的东西:

class Favorite
  belongs_to :resource
  belongs_to :user

  searchable do
    text :resource_title do
      resource.title
    end
    integer :user_id do
      user.id
    end
  end
end

然后你可以有一个搜索方法:

if params[:filter] == 'favorite'
  Favorite.search do
    keywords params[:term]
    with(:user_id, current_user.id)
    order_by(:created_at, :desc)
  end
end
于 2013-10-18T01:24:57.220 回答