views:

43

answers:

0

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 => "U2716"})
{:model=>{}, :product_category_id=>{}, :cost=>{}, :brand=>{}}

Not sure what am I missing?