関連付けられたモデルのフィールドの 1 つにファセット検索機能を実装する必要があるアプリケーションがありますが、機能していないようです。ここに簡単なコンテキストがあります: 私が取り組んでいる 3 つのモデルがあります: 1. 製品 2. 属性 3. 製品属性。以下のコード スニペットを参照してください。
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
------------------------------------------------------------------
「製品」と「ブランド」、「製品」と「モデル」の 1 対 1 の関係を定義しました。次に、両方にインデックスを定義し、それらをファセットにします。
Product モデルでは、ブランドを検索すると結果が返されますが、モデル名を検索しても結果は返されません。
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
-------------------------------------------------------------------
私の理解では、「モデル」コンテンツはインデックス化されています。結果は以下のとおりです。
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=>{}}
何が足りないのかわからない?