Ruby on rails 斯芬克斯收集搜索结果属性的思考
如何获取搜索结果的属性集合 即 我在Ruby on rails 斯芬克斯收集搜索结果属性的思考,ruby-on-rails,ruby,ruby-on-rails-4,thinking-sphinx,Ruby On Rails,Ruby,Ruby On Rails 4,Thinking Sphinx,如何获取搜索结果的属性集合 即 我在产品模型中搜索,其中有许多类别: class Product < ActiveRecord::Base has_many :categories 所以,我通过查询进行搜索 products = Product.search params[:query] categories = Category.find(products.map(&:category_id)) # slow & bad & ugly 但这种方法是如此缓慢
产品
模型中搜索,其中有许多类别
:
class Product < ActiveRecord::Base
has_many :categories
所以,我通过查询进行搜索
products = Product.search params[:query]
categories = Category.find(products.map(&:category_id)) # slow & bad & ugly
但这种方法是如此缓慢和糟糕。有没有办法从搜索结果中获取所有AttAttributes而不是collect?好的。我自己解决了。解决方案使用
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
首先,我们需要添加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)
您的方法似乎只获得前20条记录。我尝试过(在启用分页之前)
search.size#=>20
和search.count#=>6396
,而对于#collect
和#每个方法只有20个产品。Sphinx分页结果-这是没有办法的,但您可以请求非常大的页面大小。虽然如果您需要1000条以上的记录,请阅读文档:为什么我得到20条,而不是默认的1000条?我曾尝试将每页粘贴选项,专门用于收集至少1000条记录的结果,但遇到了一些困难,例如急于加载庞大的数组和分页(分页后将无法工作)。鉴于数据量巨大,也许这不是获得所需数据结果的最佳方式?加载所有类别的目的是什么?
has category(:id), as: :direct_category_id, facet: true
category_ids = products.facets[:direct_category_id].keys
categories = Category.where(id: category_ids)