0

製品とカテゴリがあるアプリケーションを構築しています。カテゴリhas_manyプロパティと各プロパティには、可能な値のリストがあります。カテゴリが製品に設定されると、すべてのプロパティがフォームに表示され、ユーザーはそのプロパティをプロパティの可能な値の1つに設定できます。

私の質問は:

Thinking Sphinxがプロパティとプロパティ値で製品をフィルタリングすることは可能ですか?例:

:with => {:property_id => property_value}

可能であれば、これを実装するための最良の方法は何ですか?そうでない場合は、この問題を解決するための他のライブラリがありますか?

ありがとう

/オラ

4

3 に答える 3

1

1 つの方法は、property_id を複数値の属性として格納することです。

class Product < ActivRecord::Base
  has_one :category
  has_many :properties, :through => :category

  KVP = "###"
  define_index do
    has properties("CONCAT(`properties`.`key`, \"%s\", `properties`.`value`)" %
           KVP, :as => :category_key_value
  end

  def search_with_properties keys, with_attr={}, p={}
    wp = (with_attr||{}).dup
    values = p.map{|k, v| "#{k}#{KVP}#{v}"} unless p.empty?
    wp = wp.merge({:category_key_value => values}) unless values.empty?
    search keys, :with => wp
  end
end

class Category < ActivRecord::Base
  belongs_to :product
  has_many :properties
end

class Property < ActivRecord::Base
  belongs_to :Category
  #key    E.g: region
  #value  E.g: South West
end

これで、次の検索コマンドを発行できます。

Product.search_with_properties("XYZ", nil, :region => "South West")
于 2010-04-21T22:22:39.297 に答える
0

これを試して:

以下を に追加しますdefine_index

has properties(:id), :as => :property_ids

:with次に、 / :withoutlikeを使用できます。

:with => {:property_ids => property_value}
于 2010-04-21T21:19:07.573 に答える
0

これはあなたの質問に答えますか:

https://github.com/freelancing-god/thinking-sphinx/issues/356

于 2012-05-07T07:03:12.937 に答える