Ruby on rails 思考狮身人面像和面像

Ruby on rails 思考狮身人面像和面像,ruby-on-rails,thinking-sphinx,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 ind

我有一个产品表和一个变体表

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个变体,例如带有尺寸标签S、M、L、XL、XXL,那么sizelabel方面将作为一个字符串“S M L XL XXL”返回

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

使用Rails 3.2.19、Sphinx 2.1.9,考虑Sphinx 3.1.1

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

另外,值得注意的是,Sphinx确实支持单值字符串属性和多值整数/时间戳/bigint属性,但不支持多值字符串属性。因此,我建议如下:将尺寸标签拉到一个单独的表中,然后在变型模型中使用尺寸标签id。然后,添加以下属性:

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

当您得到facet结果时,您需要将它们转换为有意义的文本。我认为这应该是有用的(尽管可能需要一些调整)。

谢谢@pat做得很好。