思考狮身人面像和方面

时间:2014-08-10 07:17:21

标签: ruby-on-rails thinking-sphinx

我有一个产品表和变种表

Product - title, description, id
Variant - id, product_id, size_label, qty, price

Product has_many variants
Variant belongs_to product

我已将我的产品索引定义为

ThinkingSphinx::Index.define :product, :with => :active_record, delta: true do
  indexes title, facet: true
  indexes variants.size_label, as: :sizelabel, facet: true

  has variants.id, as: :variant_ids
  has variants.qty, as: :variant_qty
end

如果我的产品有5个变体,例如size_label S,M,L,XL,XXL那么sizelabel facet将返回为一个字符串“S M L XL XXL”

我是否设置了错误的索引 - 期望将变体作为单独的散列返回(与其他方面一样)

使用Rails 3.2.19,Sphinx 2.1.9,思考Sphinx 3.1.1

1 个答案:

答案 0 :(得分:1)

如果字段是聚合(对于您的大小标签字段都是如此),则这些值将作为单个字符串连接在一起,因为Sphinx只能理解字段的单个字符串值,而不是数组。

此外,值得注意的是,虽然Sphinx支持单字符串值属性和多值整数/时间戳/ bigint属性,但不是多值字符串属性。所以,我建议如下:将大小标签拉出到一个单独的表中,然后在Variant模型中使用size_label_id。然后,添加以下属性:

has variants.size_label_id, as: :size_label_ids, facet: true

当您获得结果时,您需要将它们翻译成有意义的文本。我应该有用written some code(尽管可能需要进行一些调整)。