ThinkingSphinx& Rails 3 - 如何在模型中创建虚拟属性以进行交叉模型搜索?

时间:2012-11-28 17:50:42

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

我有大约9个型号(很快就会推出),它们目前同时具有普通型和每个中都有独特的sphinx属性 - 这些属性用作过滤器&不需要搜索。

以下是我的一些模型示例,说明了问题:

class Ad
  belongs_to :categories

  define_index('ad') do
    has categories.name, :as => :category_name_tags, :facet => true, :type => :string
  end
end

class User
  belongs_to :region
  define_index('ad') do
    #psudocode below 
    has "(SELECT name from categories)", :as => :category_name_tags, :facet => true, :type => :string
  end
end

这样我就可以这样搜索:

results = ThinkingSphinx.search "red car", :with => { :category_name_tags => "autos" }, :classes => [Ad, User]

我的所有非广告模型都需要定义一个“category_name_tags”属性,该属性将匹配用户在搜索时指定的任何“category_name_tags”过滤器 - 换句话说,这些属性应该始终与所有特定过滤器匹配 - 它们是对于大多数模型来说,我想这样做,因为如果我的模型中不存在这些属性,那么将不会返回该模型的结果。

注意:我无法修改客户端使用的数据模型。

0 个答案:

没有答案