Ruby on Rails Thinking Sphinx facets
I have an application in which I need to implement the faceted search functionality on one of the fields of the associated models and it does not seem to be working. Here is a brief context: There are 3 models I am working on: 1. Product 2. Attributes 3. ProductAttributes. Please see the code spnippets below:
class Product < ActiveRecord::Base
...
has_many :attribute_products
has_many :attributes, :through => :attribute_products, :class_name => 'Attribute'
has_one :brand, :class_name => "ProductAttribute", :conditions => "product_attributes.attribute_id IN (Select id from attributes where name = 'Brand')"
has_one :model, :class_name => "ProductAttribute", :conditions => "product_attributes.attribute_id IN (Select id from attributes where name = 'Model')"
....
define_index do
indexes :name
indexes description
indexes brand(:attribute_value), :as => :brand, :facet => true
indexes model(:attribute_value), :as => :model, :facet => true
has product_category_id, :type => :integer, :facet => true
where "products.online = 1 AND products.product_category_id IN (SELECT id FROM product_categories WHERE product_categories.parent_category_id IS NOT NULL)"
end
...
end
-----------------------------------------------------------------------
class AttributeProduct < ActiveRecord::Base
# => Since attribute is already taken, renaming the association method to prod_attr
belongs_to :attribute,
belongs_to :product
...
end
------------------------------------------------------------------
class Attribute < ActiveRecord::Base
has_many :attribute_products
has_many :products, :through => :attribute_products
....
end
------------------------------------------------------------------
I have defined 1:1 relationship between "product" and a "brand" & between "product" and a "model". Then I define indexes on both and make them facets.
Now in the Product model, the search for the brand returns results but the search for the model name does not return any result.
Product.search(:conditions => {:model => "U2716"})
Sphinx Querying: '@model 1144055474'
Sphinx (0.002063s) Found 0 result
-------------------------------------------------------------------
Product.search(:conditions => {:brand => "Calvin Klein"})
Sphinx Querying: '@brand Calvin'
Sphinx (0.004142s) Found 7 results
-------------------------------------------------------------------
In my understanding "model" content is getting indexed. The results are below:
Product.facets(:conditions => {:brand => "Calvin"})
{:model=>{"U2716"=>7}, :product_category_id=>{6=>1, 2=>6}, :cost=>{1=>3, 2=>4}, :brand=>{"Calvin Klein"=>7}}
---------------------------------------------------------------------
>> Product.facets(:conditions => {:model => "U271开发者_运维知识库6"})
{:model=>{}, :product_category_id=>{}, :cost=>{}, :brand=>{}}
Not sure what am I missing?
精彩评论