我正在对资源执行太阳黑子(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
啊,我看到了问题——您需要按 JOIN 模型的created_at
日期排序,而不是您正在索引的模型之一。
如果将太阳黑子索引移动到收藏夹模型而不是资源,该怎么办?这将导致资源标题多次编制索引,但是...
像这样:
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