如何获取搜索结果的属性集合?
即
我在Product
模型中搜索了很多Category
:
class Product < ActiveRecord::Base
has_many :categories
这是我的索引:
ThinkingSphinx::Index.define :product, with: :active_record do
###
has category(:id), as: :direct_category_id
所以,我搜索查询
products = Product.search params[:query]
categories = Category.find(products.map(&:category_id)) # slow & bad & ugly
但这种方法是如此缓慢和糟糕。有没有办法从搜索结果中获取所有的属性而不是收集?
答案 0 :(得分:1)
search = Product.search params[:query]
search.context[:panes] << ThinkingSphinx::Panes::AttributesPane
category_ids = search.collect { |product|
product.sphinx_attributes['direct_category_id']
}
categories = Category.find category_ids
但是,请记住,如果在控制台中运行此命令,则第一行会评估搜索请求,因为IRB会呈现结果。这意味着无法添加该窗格......因此您希望在第一行末尾添加; ''
或类似内容(再次:仅在Rails控制台中需要):
search = Product.search params[:query]; ''
答案 1 :(得分:0)
好。我自己解决了。解决方案使用facets
首先,我们需要添加direct_category_id:
has category(:id), as: :direct_category_id, facet: true
之后,我们只需要使用
category_ids = products.facets[:direct_category_id].keys
categories = Category.where(id: category_ids)