搜索关联条件

时间:2013-10-03 14:31:52

标签: ruby-on-rails sphinx thinking-sphinx

类别has_many产品。

在category_index我定义:
indexes :title
has products(:id), :as => :product_ids

在product_index我定义:
indexes :title

在搜索者课程中:

product_ids = Product.search_for_ids('word', with: {user_id: 5})
categories = Category.search('word')
categories_where_products_match = Category.search(with: {product_ids: products_ids})

如何将categoriescategories_where_products_match合并到一个ThinkingSphinx::Search对象中?

1 个答案:

答案 0 :(得分:1)

对于您在此处尝试执行的操作,只有在搜索“产品”时才会起作用。您的类别索引可以包含许多产品标题和许多产品用户ID,但是没有散列或字典的概念,因此Sphinx无法将两个单独的集合链接在一起。

这样的索引应该可以解决问题:

ThinkingSphinx::Index.define :product, with: :active_record do
  indexes title
  has user_id
end

然后搜索:

Product.search 'word', with: {user_id: 5}

如果您想获得与此匹配的类别,那么我建议您将以下属性添加到类别索引定义中:

has products.id, as: :product_ids

然后搜索时:

product_ids = Product.search_for_ids 'word', with: {user_id: 5}
categories  = Category.search with: {product_ids: product_ids}