搜索与searchkick有很多联系

70gysomp  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(403)

我正试图建立一个搜索功能,为我的应用程序,并遇到了一些问题,能够搜索有许多关联。我希望它的设置,使用户只看到他们有权访问的项目。
在我的用户模型中,我有:

class User < ApplicationRecord
    searchkick
    has_many :items, -> (user) { unscope(:where).where("(consumer_type = ? and consumer_id = ?))", 'User', user.id) }, fully_load: false, dependent: :destroy

    # not sure if this is helpful, was messing around with this
    def search_data
        {
            name: items.name
        }
    end
end

在我的项目模型中,我有:

class Item < ApplicationRecord
    belongs_to :consumable, polymorphic: true
    belongs_to :consumer, polymorphic: true
end

然后我有两个模型,“书”和“相机”属于该项目。我需要能够在控制器中运行查询,例如:

@results = current_user.items.search('Query')

... 因此,它将返回与搜索查询匹配的图书和相机结果。我阅读了searchkick文档的个人化结果部分,但根本无法让它工作。任何有用的提示,或有人取得了一些类似的范围界定结果的特定用户?

bvjxkvbb

bvjxkvbb1#

@results = current_user.items.search('Query')

像这样搜索是不可能的。如果是这样,那么从两个数据源进行查询并获得结果集的交集将影响性能。因此,从项目结尾开始,并将用户信息包含到该模型中。

class Item
 searchkick word_middle: %i[name]
 def search_data
   {
     consumer_type: consumer.class.to_s
     consumer_id: consumer.id.to_s
     name: self.name
   }
 end
end

options = {where: [{consumer_type: 'User', consumer_id: current_user.id.to_s}]}
results = Item.search 'query', options

相关问题